我正在尝试从游标中的表中获取ID和序列号。作为测试,我编写了以下T-SQL
DECLARE @sensId AS int
DECLARE @serNo as varchar
DECLARE Sensor_Cursor CURSOR FOR
SELECT id, serNo
FROM sensor
WHERE serNo in ('000000002C507650', '0000000038507650', '0000000034507650', '0000000070507650', '0000000044507850', '00000000843060B0');
OPEN Sensor_Cursor;
FETCH NEXT FROM Sensor_Cursor
INTO @sensId, @serNo;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sensId, @serNo
FETCH NEXT FROM Sensor_Cursor
INTO @sensId, @serNo;
END;
CLOSE Sensor_Cursor;
DEALLOCATE Sensor_Cursor;
它返回:
59 0
60 0
61 0
62 0
为什么是零?我错过了什么?
查询:
SELECT id, serNo
FROM sensor
WHERE serNo in ('000000002C507650', '0000000038507650', '0000000034507650', '0000000070507650', '0000000044507850', '00000000843060B0');
返回
id serNo
59 000000002C507650
60 0000000038507650
61 0000000034507650
62 0000000070507650
答案 0 :(得分:4)
我怀疑
DECLARE @serNo as varchar
默认为1的长度,即varchar(1)。相反,声明它是这样的:
DECLARE @serNo as varchar(20)
或其需要支持的最大长度。
答案 1 :(得分:1)
使用适当的长度声明varchar @serNo变量,例如
DECLARE @serNo as varchar(20)
答案 2 :(得分:0)
您需要定义varchar变量的长度。默认值为1个字符。
另外,游标通常是一件坏事,如果你有很多记录,如果你可以使用某种基于集合的处理,那就更好了。这可能会帮助您查看是否有更好的方法来执行您想要的操作: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them