如何将唯一行重复或复制到数据集中?

时间:2014-02-14 18:18:00

标签: sql sql-server-2008 tsql sql-server-2008-r2

这可能听起来很奇怪,但我们使用的物理打印服务将进行SQL调用,并打印返回的行。我们需要同一物理印刷品的多个副本,因此我们必须进行100次以上的同一次通话。如果我们能以某种方式返回一个唯一的行,但在通话中相同的100次,它将节省大量的处理。不幸的是,我们无法通过“副本”。

所以select * from PendingPrints P where P.RecId = 12345678会返回:

ITEM     Serial#        Description       UnusedColumn1   UnusedColumn2
55555    2014021434567  "Fancy Widget"

我们只是打了100多次电话。我需要以某种方式回复:

ITEM     Serial#        Description       UnusedColumn1   UnusedColumn2
55555    2014021434567  "Fancy Widget"
55555    2014021434567  "Fancy Widget"
55555    2014021434567  "Fancy Widget"
55555    2014021434567  "Fancy Widget"
55555    2014021434567  "Fancy Widget"
etc...................................x100

我有未使用的备用列,或者我可以创建一个我正在思考的计数器,这可能有效。我很好奇,如果我能以某种方式使用Replicate之类的东西来重复这些行。

1 个答案:

答案 0 :(得分:3)

您可以使用递归CTE(或其他方法)生成数字,然后使用连接来获得所需内容:

with nums as (
      select 1 as n
      union all 
      select n + 1
      from nums
      where n < 100
)
select *
from PendingPrints P join
     nums
     on n.n <= 100
where P.RecId = 12345678 
OPTION (MAXRECURSION 0);