EXECUTE语句可以执行存放SQL语句的字符串变量,或直接执行SQL语句字符串。
exec sql是执行存储过程,有参数的加参数
exec(sql)是执行sql字符串语句
--试了一下with as 不行,但应该是我写的语句问题,后面再试一下
--好吧,好像真的不可以,试了好几次还是不行,再看看资料再定论。。。20210708
1、执行字符串
例子:先创建表
create table #a_aa_a(
t_id int,
t_name varchar(10),
t_date int,
t_grade int
)
insert into #a_aa_a VALUES (132154,'盲僧',20210401,1)
insert into #a_aa_a VALUES (231654,'盲僧',20210403,2)
insert into #a_aa_a VALUES (236587,'盲僧',20210405,3)
insert into #a_aa_a VALUES (365214,'亚索',20210401,1)
insert into #a_aa_a VALUES (365214,'亚索',20210403,2)
insert into #a_aa_a VALUES (325412,'亚索',20210405,3)
insert into #a_aa_a VALUES (365584,'盖伦',20210401,1)
insert into #a_aa_a VALUES (236587,'盖伦',20210403,2)
insert into #a_aa_a VALUES (326985,'盖伦',20210408,3)
例1
Declare @SQLText1 Varchar(50)
Set @SQLText1 = '132154'--为字符串,需要引号
Execute('Select * from #a_aa_a where t_id=' +@SQLText1)
例2:有汉字情况
Declare @SQLText2 Varchar(50)
Set @SQLText2 = 'where t_name in(''盲僧'')'--为字符串,需要引号
Execute('Select * from #a_aa_a '+@SQLText2)
错误例子:
Declare @SQLText3 Varchar(50)
Set @SQLText3 = 'case when t_name =''盲僧'' then 1 else 0 end as ''是瞎子'''
Execute('Select *,'+@SQLText3+' from #a_aa_a ')
这里报错了,一致没理解是为什么,后来突然get到点
修改后
Declare @SQLText3 Varchar(50)
Set @SQLText3 = 'case when t_name =''盲僧'' then 1 else 0 end '
Execute('Select *,'+@SQLText3+'as ''是瞎子'' from #a_aa_a ')
-----------------------------------------------------------------------------------------------------------------------
2、执行存储过程:
使用参数名传递参数值,是通过语句“@参数名=参数值”给参数传递值。
EXECUTE 存储过程名 [@参数名=参数值] [,...n]
(那么和Exce的用法是一样的了,其实这就是简称)
例子:EXECUTE 存储过程 参数1,参数2···