2013-12-18 132 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更高的數字。

(我需要保持保留ID字段。)

+0

既然你在IDENTITY_INSERT標識符列中插入它,它需要你提到你插入到的所有列名,並提供一個值標識列,讓標識列生成值s,因爲它是你的代碼容易出錯,因爲你最終可能在Identity列中出現重複。 –

回答

1

由於大家都在專注於插入,讓我回答選擇部分:)

爲聯盟工作,確保以相同的順序明確選擇所有列:

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

我已經添加到我原來的帖子,不幸的是我需要保存ID。 –

+0

請最後一次嘗試.. ##你需要打開允許插入的選項,然後插入,然後再次關閉選項,無論是第一種情況(在你的情況下似乎沒有工作)嘗試第二種! –

+0

http://pastebin.com/5yuhKR2B 這是它給了我什麼,我不明白爲什麼它跳過了設置身份插入? –

0

您已設置Identity Specification-> Is Identity to True

所以你不能插入自動手動生成主鍵!

+0

實際上沒有主鍵集,我可以使用當前的相同ID添加另一個值。這是你看到的數據庫導出,所以在導出時沒有執行PK。 –

+0

您需要將'isidentity'設置爲否,然後嘗試 –

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; 

試試這個沒有ID。

+0

現在插入,儘管我需要保留ID(請參閱我的原始帖子)。有沒有解決方法? –

+0

id應該是自動增量...或者創建一個外鍵來鏈接表。 –

+0

僅限使用數據時。我試圖導出需要id的數據而不會改變! –