【发布时间】:2015-07-23 06:38:17
【问题描述】:
我正在尝试编写一个存储过程,它将从如下表中的表中获取行
并将它们插入与数量列的值一样多的次数。它还应该为插入的行分配一个唯一的名称和编号。
最终结果应该类似于下面的屏幕截图
我可以通过下面的 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 方面不是很有经验。
【问题讨论】:
-
使用table of numbers 没有任何问题。我个人在数据库中有一个包含 10 万个数字的实际表,而不是像你那样动态生成它。
-
点赞!我喜欢这篇文章。信息量很大。不幸的是,使用这种方法很难让我的项目中的其他开发人员参与进来。
标签: sql-server sql-server-2012