ВЫБРАТЬ * (кроме идентификатора) ОТ - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть таблица с примерно 20 столбцами, и я хочу дублировать запись. Я мог бы просто сделать:

INSERT INTO [Table] (ColumnA, ColumnB, ColumnC, .... ColumnZ)
SELECT TOP 1 ColumnA, ColumnB, ColumnC, .... ColumnZ
FROM [Table]
WHERE ID=@ID

Однако это займет много времени, и если в будущем в таблицу будет добавлен новый столбец, я хочу, чтобы это автоматически дублировалось. Поэтому я ищу какой-то способ сделать:

INSERT INTO [Table]
SELECT TOP 1 * (apart from identity)
FROM [Table]
WHERE ID=@ID

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

SQL Server не предоставляет каких-либо функций выбора, кроме идентификатора, вам придется написать это самостоятельно, указав каждый столбец. Если определения столбцов таблицы будут меняться со временем (добавлять, переименовывать или удалять столбцы), то единственный способ сделать это - с помощью динамического кода создать оператор вставки на основе содержимого sys.columns для object_kd = object_id ('YourTable '), исключая столбец идентификаторов, если таковой имеется. За мои деньги, если вы добавите столбцы, вам лучше просмотреть и обновить код, который ссылается на эту таблицу.

Да, и если ID является первичным ключом, то top 1 не требуется.

1 голос
/ 27 апреля 2011

В одну сторону, но будет захватывать все столбцы

SELECT TOP 1 * 
INTO [NewTable]
FROM [Table]
WHERE ID=@ID

Другой вариант - динамический SQL, создайте список столбцов из information_schema.columns, пропустите один с идентификатором и затем выполните динамический sql

...