Sql server 创建一个逗号分隔的字符串,数字为1到x,其中x从记录中读取
我有一个表Sql server 创建一个逗号分隔的字符串,数字为1到x,其中x从记录中读取,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我有一个表文档,其中有一个字段步骤。这是一个整数字段,可以包含1到1000之间的数字 现在添加了一个新字段(followedsteps),该字段必须包含从1到[字段步骤中的数字],以逗号分隔 因此,当字段steps包含数字5时,我希望在新列followedsteps中设置该字符串1,2,3,4,5 字段steps不能为空,最低值为1 有没有(简单的)方法可以做到这一点 这是一次迁移。由于只执行一次,最好先生成序列: IF OBJECT_ID('tempdb..#DataSource') IS N
文档
,其中有一个字段步骤
。这是一个整数字段,可以包含1到1000之间的数字
现在添加了一个新字段(followedsteps
),该字段必须包含从1到[字段步骤中的数字],以逗号分隔
因此,当字段steps
包含数字5时,我希望在新列followedsteps
中设置该字符串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)
在stackoverflow.com上查看t-sql和sql server标记下的“group_concat”。有几种解决方案可以很容易做到这一点。@JonathonOgden我熟悉在MSSQL中实现
group\u concat
-类型行为的各种方法,但是如何解决需要使所有正整数值低于步骤中的值的额外问题呢?我看不到您提到的组\u concat
问题中的任何示例-您是否需要使用数字表,或者对ROW\u NUMBER()
进行一些古怪的调用,以获得从1到1000的所有数字的列表?错过了1次迁移行+1
BEGIN TRAN
UPDATE document
SET followedsteps = [Sequence]
FROM document A
INNER JOIN ##DataSource B
ON A.[steps] = b.[id]
COMMIT TRAN