比较SQL WHILE循环中的两个变量

时间:2017-06-06 17:09:27

标签: sql sql-server

我收到错误

  

Msg 102,Level 15,State 1,Line 16
  '@PacketCode'附近的语法不正确。

当我尝试执行时。我的WHILE循环有问题,但我看不清楚。有什么建议吗?

DECLARE @PacketCode as varchar(255)
SET @PacketCode = 'ZZZ_Archive_TEST'

DECLARE @Value as varchar(255)
SET @Value = ''

DECLARE @i int
SET @i = 1

SELECT 
    @Value = (SELECT packetcode
              FROM tblScriptReports
              WHERE packetcode = @PacketCode)

WHILE (@PacketCode = @Value) 
BEGIN
    @PacketCode = @PacketCode + ' (' + @i + ')'

    SELECT @Value = (SELECT packetcode
                    FROM tblScriptReports
                    WHERE packetcode = @PacketCode)

    SET @i = @i + 1                   
END

SELECT @PacketCode

2 个答案:

答案 0 :(得分:3)

在TSQL中,您可以使用SET命令分配变量值。

所以不要这样:

@PacketCode = @PacketCode + ' (' + @i + ')'

你必须这样做:

SET @PacketCode = @PacketCode + ' (' + @i + ')'

有趣的是,您在代码中的其他任何位置都正确地执行了此操作。

答案 1 :(得分:1)

尝试在BEGIN中的@PacketCode前面添加一个SET:

DECLARE @PacketCode as varchar(255)
set @PacketCode = 'ZZZ_Archive_TEST'

DECLARE @Value as varchar(255)
set @Value = ''

DECLARE @i int
set @i = 1

SELECT @Value = (SELECT packetcode
             FROM tblScriptReports
             WHERE packetcode = @PacketCode)

WHILE (@PacketCode = @Value) 

BEGIN

SET @PacketCode = @PacketCode + ' (' + @i + ')'

    SELECT @Value = (SELECT packetcode
                    FROM tblScriptReports
                    WHERE packetcode = @PacketCode)

    set @i = @i + 1                   
END

select @PacketCode