2013-12-18 3 views
0

У меня есть 2 больших стола, каждая по 25 столбцов. Оба они содержат одни и те же данные, но столбцы находятся в разных порядках.SQL Server: объединить две таблицы

Как объединить эти таблицы без необходимости переупорядочивать код запроса? Я бы предпочел не делать этого для скрипта ~ 600 строк.

При необходимости я могу привести пример того, как он выглядит, но я действительно не вижу необходимости.

Я до сих пор пробовал;

SELECT * FROM [guest].table1 UNION ALL SELECT * FROM [guest].table2; 
SELECT * FROM [guest].table1, [guest].table2; 

Я также попытался вставить данные так;

SET IDENTITY_INSERT [guest].table1 ON; 
SET IDENTITY_INSERT [guest].table2 ON; 

INSERT INTO [guest].table1 id, short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number) 
select id, short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number 
FROM [guest].table2; 

Но это дает мне эту ошибку:

SQL Error: Cannot insert explicit value for identity column in table 'exported_cases' when IDENTITY_INSERT is set to OFF.

Любая помощь будет принята с благодарностью!

Чтобы уточнить, я экспортирую базу данных, которая в настоящее время существует в 2 частях (таблица1 и таблица2). У него уже есть PK, и я не вставляю его в него, пока он не будет полностью экспортирован, после чего PK будет установлен на число, большее, чем любой текущий PK.

(мне нужно держать поле идентификатора сохранившийся.)

+0

Поскольку вы вставляете в столбец идентичности с идентификатором IDENTITY_INSERT, вам нужно указать все имена столбцов, в которые вы вставляете, и предоставить значение для Столбец идентификатора. Пусть столбец Identity генерирует значение s, так как именно ваш код подвержен ошибкам, так как в столбце Identity вы можете найти дубликаты. –

ответ

1

Поскольку все фокусирует на вставке, позвольте мне ответить на часть :) выберите

Для UNION работать, убедитесь, что вы явно выбрать все столбцы в том же порядке:

SELECT id, short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number 
FROM [guest].table1 
UNION ALL 
SELECT id, short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number 
FROM [guest].table2 

Этот набор результатов вы можете использовать для запроса, вставки в новую таблицу или что угодно:

+0

Это исправило мою проблему, но для будущего я буду продолжать пытаться исправить предыдущую проблему на случай, если кому-то это понадобится! Большое спасибо! –

0
you should not insert identity element its generated auto: 

just try inserting all except id(which is your identity) 

пожалуйста, попробуйте следующее:

SET IDENTITY_INSERT [guest].table1 ON; 
    SET IDENTITY_INSERT [guest].table2 ON; 

    INSERT INTO [guest].table1 id, short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number) 
    select id, short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number 
    FROM [guest].table2; 

SET IDENTITY_INSERT [guest].table1 OFF; 
SET IDENTITY_INSERT [guest].table2 OFF; 
+0

Я добавил к своему оригинальному сообщению, мне нужно сохранить идентификатор к сожалению. –

+0

PLS попробуйте в последний раз .. ## вам нужно включить опцию для включения вставок, затем вставить, затем снова включить опцию OFF, либо в первом случае (кажется, в вашем случае нет работы) попробуйте второй! –

+0

http://pastebin.com/5yuhKR2B Это то, что он дает мне, я не понимаю, почему он пропускает установленную идентификационную вставку? –

0

Вы установите Identity Specification-> Is Identity to True

Таким образом, вы не можете вставить авто сгенерированный первичный ключ вручную !!!

+0

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

+0

Вам нужно установить 'isidentity' в no, а затем попробовать –

0
INSERT INTO short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number) 
select short_name, name, invention_title, reference, client_id, client_ref, date_case_opened, date_case_closed, case_type, notes, fee_earner, created, last_updated, file_location, foreign_attorney_id, foreign_attorney_ref, country_code, application_number, filing_date, publication_number, invoice_currency, publication_date, status, pct_application_number, pct_case_id, national_phase_entry, base_number, base_country, base_date, base_case_id, divisional_date_lodged, illustrative_image, parent_case_id, parent_application_number 
FROM [guest].table2; 

Попробуйте это без удостоверения личности.

+0

Теперь он вставляет, хотя мне нужно сохранить идентификатор (см. Мой оригинальный пост). Есть ли обходные пути? –

+0

идентификатор должен быть автоматическим приращением ... или создать внешний ключ для связывания таблицы. –

+0

Только при работе с данными. Я пытаюсь экспортировать данные, которые требуют, чтобы идентификатор НЕ менялся! –

Смежные вопросы