在 SQL 服务器中循环逗号分隔值
looping through Comma Separated Values in SQL Server
我需要遍历变量 @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)
非常感谢您的帮助。提前致谢:)
从 SQL Server 2017 开始,您可以使用 STRING SPLIT 函数:
https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15
添加到 Garbriele 的回答中,您的脚本必须如下所示:
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)
结果如下:
见DEMO
我需要遍历变量 @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)
非常感谢您的帮助。提前致谢:)
从 SQL Server 2017 开始,您可以使用 STRING SPLIT 函数:
https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15
添加到 Garbriele 的回答中,您的脚本必须如下所示:
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)
结果如下:
见DEMO