创建重复的行以进行数据导出

时间:2018-12-17 17:17:38

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

给定一个特定的SELECT语句,我如何(至少使用SQL Server 2008)为SELECT中的每一行返回2个相同的行?

我需要为我的客户创建一个导出CSV文件,该客户将使用该文件将数据导入另一个系统。那个其他系统要求数据库中的每一行数据 2行相同数据……不要问为什么,我不知道,它只是这样做。

SELECT非常复杂,并返回近100列信息。

最简单的解决方案是使用SELECT复制整个UNION ALL,但这很麻烦,如果有人更新了一个选择而忘记更新另一个选择,则可能会导致错误(永远不会发生,但是我们都是人类。

是否有一种简便的INNER JOIN技术可以用来做到这一点,还是我正在寻找临时表/ CTE?

3 个答案:

答案 0 :(得分:3)

尝试一下:

testCompile project(':libProject').sourceSets.test.output

使用中:

CROSS APPLY (SELECT 1 AS Y UNION SELECT 2) X

答案 1 :(得分:1)

以典型的方式,在写完问题后不久,我想出了一种解决方法...

SELECT *
FROM [MyTable] MT
  INNER JOIN (
    SELECT 1 AS ROWNUM
    UNION ALL
    SELECT 2 AS ROWNUM
  ) SUB
    ON MY.[PrimaryId] = MY.[PrimaryID]

答案 2 :(得分:1)

只需将CROSS JOIN添加到只有两个记录的表中,如下例所示:

declare @Twice as table
(
   Id smallint not null
)

insert into @Twice values (1),(2)

select so.name as [Table], sc.name as [Column]
from @twice t
cross join sys.sysobjects so
join sys.syscolumns sc on sc.id = so.id
where so.xtype = N'U'

该技术的优点是您无需在查询中花太多时间,如果需要更多副本,只需将更多行添加到“乘数”表中即可。