MS sqlserver中的变量 表变量问题--解决办法

本文介绍了三种在SQL中使用变量和临时表的方法:通过创建临时表来传递变量,使用sp_executesql执行动态SQL并返回结果,以及利用动态SQL创建多个临时表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//解决办法 临时表

表变量与其他变量相同,只在其作用域中有效,
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@i
int
while(@i>0)
begin
set@sqlstr='CREATETABLETABLE_'+cast(@Iasvarchar)+'(...)'
exec(@sqlstr)
set@i=@i-1
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值