遍历SQL Server中的逗号分隔值

时间:2020-07-03 12:19:12

标签: sql-server sql-server-2008 sql-server-2005

我需要遍历变量 @columnNames 中存在的每个值,并在动态sql中使用它。下面是代码。

DECLARE @columnNames NVARCHAR(MAX), @dSql NVARCHAR(MAX)

SEt @columnNames = 'SCHEDULEDSTART, SCHEDULEDEND'

WHILE (LEN(@columnNames) > 0)
BEGIN
    SELECT left(@columnNames, charindex(',', @columnNames+',')-1)
    print @columnNames
    SET @dSql = 'ALTER TABLE NAMS.AssetActivity ALTER COLUMN ' + @columnNames + ' DATETIME2(7)'
    PRINT (@dSql)
    set @columnNames = stuff(@columnNames, 1, charindex(',', @columnNames+','), '')
END

在输出中,第一个查询被弄乱了。我得到的输出如下:

(1 row affected)
ALTER TABLE NAMS.AssetActivity ALTER COLUMN SCHEDULEDSTART, SCHEDULEDEND DATETIME2(7)

(1 row affected)
ALTER TABLE NAMS.AssetActivity ALTER COLUMN  SCHEDULEDEND DATETIME2(7)

非常感谢您的帮助。在此先感谢:)

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

在加布里埃尔的答案中,您的脚本必须看起来像这样:

DECLARE
    @columnNames    NVARCHAR(MAX)
,   @dSql           NVARCHAR(MAX) = ''

SET @columnNames = 'SCHEDULEDSTART, SCHEDULEDEND'

SELECT
    @dSql = @dSql + 'ALTER TABLE NAMS.AssetActivity ALTER COLUMN ' + LTRIM(RTRIM(Value)) + ' DATETIME2(7)'+char(10)
FROM    STRING_SPLIT(@columnNames, ',')

PRINT   (@dSql)
--EXEC  (@dSql)

这将为您带来以下结果:

Results

请参见DEMO