//解决办法 临时表
表变量与其他变量相同,只在其作用域中有效,
exec()执行的sql已是另一个会话了,变量无法传递的
可以用临时表解决
createproctest
as
declare@strSQLvarchar(300)
createtable#tblTmp([ID]int,[name]varchar(20))
set@strSQL="insertinto#tblTmpselectID,namefromtbl"
exec(@strSQL)
GO
//第二中解决办法
问题描述:
在存储过程中我定义了两个参数,@Filed代表一个列,@TableName代表表名,一个变量@SQLStr代表SQL语句,
以下语句:SELECT@SQLStr=SELECTTOP1@FieldFROM@TableName
EXEC(@SQLStr)
这两句都û问题,但是如何把查询出来的结果赋值到一个变量中(如变量@tmpStr)?
直接用如下语句则语法检查时会报错,说须先定义变量@TableName,但是我已经定义了啊:
SELECTTOP1@tmpStr=@FieldFROM@TableName
解决方案:declare@sqlnvarchar(4000)
set@sql=N'SELECTTOP1@tmpStr='+@Field+'FROM'+@TableName
execsp_executesql@sql,N'@tmpStr类型out',@tmpStrout
//第三种解决办法
可以这样:
delcare@sqlstrvarchar(8000)
declare@iint
while(@i>0)
begin
set@sqlstr='CREATETABLETABLE_'+cast(@Iasvarchar)+'(...)'
exec(@sqlstr)
set@i=@i-1
end
本文介绍了三种在SQL中使用变量和临时表的方法:通过创建临时表来传递变量,使用sp_executesql执行动态SQL并返回结果,以及利用动态SQL创建多个临时表。
798

被折叠的 条评论
为什么被折叠?



