Нужна помощь SQL с копированием строк - PullRequest
3 голосов
/ 22 января 2011

У меня есть таблица с несколькими столбцами.

Существует один первичный ключ, который является идентификатором типа int и не содержит внешних ключей. Этот PK установлен со Спецификацией Идентификации с инкрементом и начальным значением, оба установлены в 1, что бы это ни значило. Для «Не для репликации» установлено значение «Да». Есть еще две важные строки: год для данных и ссылочный номер, которые я буду использовать, чтобы специально выбрать, какие строки копировать.

Есть ли способ использовать SQL или комбинацию SQL и C # для копирования определенного набора строк по ссылочному номеру и назначения каждой строке уникального идентификатора первичного ключа? Количество копируемых строк может отличаться каждый раз, поэтому оно должно быть гибким. Так как в системе без проблем выбирается идентификатор или он может получить максимальный идентификатор и увеличивать его на единицу для каждой копируемой строки или чего-либо еще. Я также добавлю новый год в столбец, но это достаточно просто по сравнению с основной проблемой, состоящей в том, чтобы он сам устанавливал идентификаторы первичного ключа для каждой строки посредством оператора SQL для этого типа столбца ...

Пожалуйста, помогите! Я не новичок в SQL, но я все еще учусь и никогда раньше не сталкивался с подобными проблемами, связанными с конкретными проблемами Not For Replication и т. Д.

Ответы [ 2 ]

2 голосов
/ 22 января 2011

Поскольку ваш первичный ключ - это столбец идентификаторов, вы можете выбрать нужные строки (кроме столбца идентификаторов) и снова вставить их в одну таблицу:

INSERT INTO table1 (col1, col2, col3)
SELECT (col1, col2, col3) FROM table1
WHERE ....
0 голосов
/ 25 октября 2018

Если вы не хотите добавлять все столбцы один за другим, а просто исключаете основной столбец идентификации, вы можете использовать следующее.

Допустим, имя вашей таблицы сущность

-- Copy row without Id
SELECT * INTO TempTable FROM entity WHERE entity_id = 1; // AND OTHER CONDITIONS
ALTER TABLE TempTable DROP COLUMN entity_id;
INSERT INTO entity SELECT * FROM TempTable;
DROP TABLE TempTable;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...