为数据导出创建重复行

Create duplicate rows for data export

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

我需要为我的客户创建一个 CSV 导出文件,客户将使用它来将数据导入另一个系统。对于我的数据库中的每个 行数据,另一个系统需要 2 行相同的数据...不要问为什么,我不知道,就是这样。

SELECT 相当复杂,return 有将近 100 列信息。

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

是否有一种简单的 INNER JOIN 技术可用于执行此操作,或者我正在寻找临时 tables/CTEs?

试试这个:

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

正在使用:

SELECT T.*
FROM SYS.TABLES T
CROSS APPLY (SELECT 1 AS Y UNION SELECT 2) X
ORDER BY T.NAME

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

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

只需添加带有 table 的 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'

这种技术的优点是您不需要将查询搞得一团糟,如果您需要更多副本,只需将更多行添加到 "multiplier" table.