Создать дубликаты строк для экспорта данных - PullRequest
0 голосов
/ 17 декабря 2018

Учитывая конкретный оператор SELECT, как я могу (используя SQL Server 2008 как минимум) вернуть 2 одинаковые строки для каждой строки в SELECT?

Мне нужно создать файл экспорта CSVдля моего клиента, который будет использовать его для импорта данных в другую систему.Эта другая система требует 2 строки идентичных данных для каждой строк данных в моей базе данных ... не спрашивайте, почему, я не знаю, просто так.

SELECT является довольно сложным и возвращает почти 100 столбцов информации.

Самым простым решением было бы реплицировать весь SELECT с UNION ALL, но это грязно и может привести к сбоямесли кто-то обновляет один из вариантов выбора и забывает обновить другой (что никогда не должно происходить, тем не менее, мы все люди).

Существует ли простая техника INNER JOIN, которая может быть использована для этого,или я смотрю на временные таблицы / CTE?

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Как правило, вскоре после написания вопроса я придумываю способ сделать это ...

SELECT *
FROM [MyTable] MT
  INNER JOIN (
    SELECT 1 AS ROWNUM
    UNION ALL
    SELECT 2 AS ROWNUM
  ) SUB
    ON MY.[PrimaryId] = MY.[PrimaryID]
0 голосов
/ 17 декабря 2018

Просто добавьте 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'

Преимущество этого метода в том, что вам не нужно много путаться с вашимзапрос и, если вам нужно больше копий, просто добавьте больше строк в таблицу «множителей».

0 голосов
/ 17 декабря 2018

Попробуйте:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...