困扰已久的SQL 表变量更新的问题解决

本文介绍了在SQLServer中更新表变量数据时遇到的问题及解决方法。通过重新声明表变量作为别名,成功解决了更新过程中出现的错误。此外,还提供了一段测试代码示例。

在SQL Server中如果要借用update @t set col1=t2.col1 from t2 where @t.col1=t2.col1的语句来更新表变量中的数据时,会得到一个“must declare variant @t”的错误消息,原因是这里条件语句中的@t会被解析器当作一个变量来看待,故此不能做出正确的执行。

后找到解决办法:只须将@t再声明一次即可,声明为别名,如下即可:

 update @t set col1=t2.col1 from @t t1, t2 where t1.col1=t2.col1

至此,问题解决。

 

测试代码:

ExpandedBlockStart.gif代码
 1 
 2 declare @t table(id int,col1 varchar(10))
 3 create table #t1(id int ,col1 varchar(10))
 4 
 5 insert into #t1
 6 select 1,'a'
 7 insert into #t1
 8 select 2,'b'
 9 insert into @t select * from #t1
10 select * from @t
11 
12 update #t1 set col1='c' where id=1
13 
14 update @t set col1=t1.col1 from @t t,#t1 t1 where t.id=t1.id
15 
16 select * from @t
17 
18 drop table #t1

 

转载于:https://www.cnblogs.com/qml007/archive/2011/01/09/1931544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值