首页 > 解决方案 > 使用条件遍历列

问题描述

我目前正在尝试遍历标题为“Switch 1, Switch 2, ....”的 38 列,以便根据条件更新它们。

这是我的代码:

DECLARE @i int
DECLARE @selec nvarchar(max)

SET @i  = 1

WHILE @ i <= 38
    BEGIN
        SET @selec = 'UPDATE 'Catalog v4'' + '
        SET   'Switch' + LTRIM(STR(@i+1)) = ' + CASE
        WHEN ( 'Switch' + LTRIM(STR(@i+1))= [Switch Check String] ) THEN ( '' )
        ELSE ( 'Switch' + LTRIM(STR(@i+1))) 
        SET @i = @i+1
        EXEC(@selec)
     END 

我不断收到错误

必须声明标量变量@,Recipe 附近的语法不正确

任何帮助将不胜感激,谢谢!

标签: sql-servertsql

解决方案


假设您正在尝试更新表 [目录 4],以下可能会有所帮助:

DECLARE @i int
DECLARE @selec nvarchar(max)

SET @i  = 1

WHILE @i <= 38
    BEGIN
        SET @selec = 'UPDATE '+QUOTENAME('Catalog v4')+'
        SET   '+QUOTENAME('Switch ' + LTRIM(STR(@i+1)))+' =  CASE
        WHEN ('+QUOTENAME('Switch '+ LTRIM(STR(@i+1)))+' = ''[Switch Check String]'' ) THEN ( '''' )
        ELSE ('+QUOTENAME('Switch ' + LTRIM(STR(@i+1)))+') END'
        
        PRINT @selec    --please check the printed messages before executing those.

        SET @i = @i+1
        --EXEC(@selec)
     END
  • Quotename如果其中有空格,则有助于正确定义对象名称。
  • 请相应地替换[开关检查字符串]。

推荐阅读