Sql多次插入同一行

时间:2015-07-22 22:04:22

标签: sql-server sql-server-2012

我试图编写一个存储过程,它会从下面的表中获取行

enter image description here

并插入它们与Quantity列的值一样多次。它还应该指定一个唯一的名称&插入行的编号。

最终结果应该类似于下面的屏幕截图

enter image description here

我可以通过下面的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方面不是很有经验。

1 个答案:

答案 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 ....;

SQL Fiddle Demo