为什么列a+;=@值不等于列_a=列_a+@SQL Server 2008中的价值?

为什么列a+;=@值不等于列_a=列_a+@SQL Server 2008中的价值?,sql,sql-server,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,我编写了一个存储过程来更新表中的数据。看起来是这样的: UPDATE dbo.sample SET column_a += @value WHERE id = @id 我发现它是更新没有总和第一。结果如下所示: UPDATE dbo.sample SET column_a = @value WHERE id = @id 我必须使用SET column\u a=column\u a+@value使其正确更新。我想知道为什么SQL Server在分配给左边之前不对右边的表达式求和。我用变量进行了

我编写了一个存储过程来更新表中的数据。看起来是这样的:

UPDATE dbo.sample
SET column_a += @value
WHERE id = @id
我发现它是更新没有总和第一。结果如下所示:

UPDATE dbo.sample
SET column_a = @value
WHERE id = @id
我必须使用
SET column\u a=column\u a+@value
使其正确更新。我想知道为什么SQL Server在分配给左边之前不对右边的表达式求和。我用变量进行了测试,它是有效的。它不仅在这种情况下有效

我现在使用的命令是:

UPDATE dbo.sample
SET column_a = column_a + @value
WHERE id = @id

我尝试了以下脚本。这对我来说很好

我建议你试试这个。如果问题仍然存在,请告诉我

create table #temp1(id int, prodName varchar(max))

insert into #temp1 values(1,'a')
insert into #temp1 values(2,'b')
insert into #temp1 values(3,'c')
insert into #temp1 values(4,'d')

select * from #temp1

declare @var varchar(1);
set @var = '5'; --note that i even tried declaring it as a varchar. it still works!
update #temp1
set id +=@var

select * from #temp1

drop table #temp1
列a+=@value等于SQL Server 2008中的列a=列a+@value


只是第一个短

你错了。请再测试一次。看,我刚刚在我的机器上再次测试了它。我不知道为什么。它可能与我在代码中使用的事务有关。您能否提供一个完整的可运行测试用例,在您的计算机上重现此问题?您是否真的连接到SQL Server的2008版本?能否在SQL Server上运行
SELECT@@Version
,并查看它报告的内容?