можно вставить копию строки из таблицы T в таблицу T без перечисления ее столбцов и без ошибки первичного ключа? - PullRequest
0 голосов
/ 05 мая 2011

Я хочу сделать что-то вроде этого:

INSERT INTO T SELECT * FROM T WHERE Column1 = 'MagicValue' -- (multiple rows may be affected)

Проблема в том, что T имеет столбец первичного ключа, и это вызывает ошибку, как будто пытается установить первичный ключ.И, честно говоря, я тоже не хочу устанавливать первичный ключ.Я хочу создать совершенно новые строки с новыми первичными ключами, но остальные поля копируются из исходных строк.

Предполагается, что это общий код, применимый к различным таблицам.Итак, если нет хорошего способа сделать это, я просто напишу код для динамического извлечения имен столбцов, построения списка и т. Д. Но, возможно, есть?Я первый парень, который пытается создать повторяющиеся строки в базе данных или что-то в этом роде?

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

Вы ничего не получите от дублирования строки в базе данных (учитывая, что вы не пытались установить первичный ключ). Было бы мудрее и избежать проблемы, если бы другой столбец назывался «сумма» или что-то в этом роде.

что-то вроде

UPDATE T SET Amount = Amount + 1 WHERE Column1 = 'MagicValue'

или если оно может увеличиться более чем на 1, как количество возвращаемых полей

Update T SET Amount = Amount * 2 WHERE Column1 = 'MagicValue'

Я не уверен, что именно вы пытаетесь сделать, но если вышесказанное не работает для того, что вы делаете, я думаю, что ваш дизайн требует новой таблицы и вставьте ее туда.

РЕДАКТИРОВАТЬ: Также, как упоминалось в ваших комментариях, общая вставка не имеет смысла. Представьте, что для этого вам нужно одинаковое количество полей, и они будут содержать одинаковые значения, что предполагает, что они также должны иметь одинаковые имена (даже если это не требуется). В основном это будет одна и та же структура таблицы дважды.

0 голосов
/ 05 мая 2011

Я предполагаю, что под "Первичным ключом" вы подразумеваете identity или guid типы данных, которые автоматически назначаются или автоматически увеличиваются.

Без какого-то очень фантастического динамического SQL вы не сможете делать то, что вам нужно. Если вы хотите вставить все, кроме поля идентификатора, вам нужно указать поля.

Если вы хотите указать значение для этого поля, вам необходимо указать все поля в SELECT и в INSERT AND включить IDENTITY_INSERT.

...