buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

将查询结果赋值给变量时使用set与select的区别

在某些应用场景下,将一个查询结果值赋值给一个变量时, 一定要注意set与select的使用。 好,直奔主题:

/****************** 场景布置 ******************/
DROP TABLE #
CREATE TABLE #(OrderId INT)
INSERT #(OrderId) VALUES(1)
INSERT #(OrderId) VALUES(2)


/****************** 角色上场 ******************/
-----角色1:
DECLARE @id INT 
SET @id=100
SET @id=(SELECT ISNULL(OrderId,0) FROM # WHERE OrderId=1000000000)
SELECT @id
--结果为NULL, 因为不存在OrderId为1000000000的单号,所以为NULL

-----角色2:
DECLARE @id INT 
SET @id=100
SELECT @id=ISNULL(OrderId,0) FROM # WHERE OrderId=1000000000
SELECT @id
--结果为100, 因为不存在OrderId为1000000000的单号,所以执行SELECT @id=...未能给@id赋值

-----角色3:
DECLARE @id INT 
SET @id=100
SELECT @id=OrderId FROM #-- ORDER BY OrderId DESC
SELECT @id
--结果为2, 执行SELECT @id=...将返回结果的最后一个值给@id


今天在调试sp时,由于把角色2派上用场,使我可没少费心思。 最后换成角色1ok了。

posted on 2012-09-18 20:38  buguge  阅读(903)  评论(0编辑  收藏  举报