我有一个表document
,其中包含一个字段steps
。这是一个整数字段,可以包含 1 到 1000 之间的数字。
现在添加了一个新字段(followedsteps
),其中必须包含从 1 到 [字段步骤中的数字] 的数字,以逗号分隔。
因此,当字段 steps
包含数字 5 时,我希望在新列 中设置此字符串
。1,2,3,4,5
遵循步骤
字段steps
不能为空,最小值为1。
有没有一种(简单)的方法可以做到这一点?
这是一次性迁移。
最佳答案
由于您只执行一次此操作,因此最好首先生成序列:
IF OBJECT_ID('tempdb..#DataSource') IS NOT NULL
BEGIN;
DROP TABLE #DataSource;
END;
CREATE TABLE #DataSource
(
[ID] INT
,[Sequence] VARCHAR(MAX)
);
DECLARE @MaximumID INT = 1000; -- in your case: SELECT MAX(steps) FROM document
WITH DataSource AS
(
SELECT 1 AS num
UNION ALL
SELECT num+1
FROM DataSource
WHERE num+1<=@MaximumID
)
INSERT INTO #DataSource
SELECT A.[num]
,DS.[Sequence]
FROM DataSource A
CROSS APPLY
(
SELECT STUFF
(
(
SELECT ',' + CAST(B.[num] AS VARCHAR(12))
FROM DataSource B
WHERE A.[num] >= B.[num]
ORDER BY B.[num]
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1
,1
,''
)
) DS ([Sequence])
option (maxrecursion 32767)
上面的代码创建一个临时表,其中包含执行更新所需的数据:
然后在事务中,通过[ID]
执行更新:
BEGIN TRAN
UPDATE document
SET followedsteps = [Sequence]
FROM document A
INNER JOIN ##DataSource B
ON A.[steps] = b.[id]
COMMIT TRAN
关于sql-server - 创建一个逗号分隔的字符串,其中包含数字 1 到 x,其中 x 是从记录中读取的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286156/