我试图编写一个存储过程,它会从下面的表中获取行
并插入它们与Quantity列的值一样多次。它还应该指定一个唯一的名称&插入行的编号。
最终结果应该类似于下面的屏幕截图
我可以通过下面的SQL非常接近我想要的东西 Source
INSERT INTO dbo. MyTable (....)
SELECT
t1.Name + ' (' + CAST(E.n as VARCHAR(3)) + ')',
@Prefix + ' - ' + ROW_NUMBER () OVER (ORDER BY t1.Name )
FROM
MyFirstTable t1
JOIN ....
JOIN .....
CROSS JOIN
(SELECT TOP 500 ROW_NUMBER() OVER(ORDER BY (SELECT 1)) FROM sys.columns)E(n)
WHERE
E.n <= t1.Quantity
AND....
以上陈述是有效的,因为我知道数量永远不会超过500,但我并不喜欢它的做法。有没有更好的方法来实现这一目标?
我在sql方面不是很有经验。
答案 0 :(得分:1)
好像你已经找到了大部分需要的东西。至于top 500
不超过,你可以将它留在那里或删除它。我想这就是你可能在寻找的东西:
SELECT
id, --not sure where this id comes from but looks different in your output
CASE
WHEN E.n-1 > 0
THEN t1.Name + ' (' + CAST(E.n-1 as VARCHAR(3)) + ')'
ELSE t1.Name
END as Name,
@prefix + ' - ' + cast(ROW_NUMBER () OVER (ORDER BY t1.id) as varchar(10)) as Number
FROM
test t1
JOIN ...
JOIN ...
CROSS JOIN
(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) FROM sys.columns)E(n)
WHERE
E.n <= t1.Quantity
AND ....;