CREATE PROCEDURE p_PName
成都创新互联公司专业为企业提供莱阳网站建设、莱阳做网站、莱阳网站设计、莱阳网站制作等企业网站建设、网页设计与制作、莱阳企业网站模板建站服务,10多年莱阳做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
@ID int
AS
begin
DECLARE @Num INT
end
如上为存储过程模板,在AS之前的为存储过程参数,需要外部传入或接受。调用方式如下。
exec p_PName @ID=1 或者 EXEC p_PName 1(省略参数名),但外部都是需要传入的。
在AS后定义的变量,可以理解为临时变量,外部是无法访问到此变量的。
不可以,列名、表名都不能用变量,可以通过拼接字符,然后用exec来执行 如,exec('update tb set '+列名变量+'='''+字符类的变量值+''' where 条件')
局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);
申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;
赋值:有两种方法式(@num为变量名,value为值)
set @num=value; 或 select @num=value;
如果想获取查询语句中的一个字段值可以用select给变量赋值,如下:
select @num=字段名 from 表名 where ……
全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。
存储过程里参数的默认值不能使用函数,所以不能在存储过程里直接把参数的默认值设置为当前系统时间,不过可以在存储过程里赋值。还有一点疑问,既然@myday是当前系统时间了,为什么还要做成参数呢?
CREATE PROCEDURE pro_test
@myday char(10)
AS
set @myday=convert(char(10),getdate(),21)
update mytable set status = 1 where day@myday
GO
@myday不为参数时可以这么写
CREATE PROCEDURE pro_test
AS
declare @myday char(10)
set @myday=convert(char(10),getdate(),21)
update mytable set status = 1 where day@myday
GO