2012-10-02 43 views
1

當生成數據庫腳本時,我正在腳本化數據以遷移到不同的環境。在腳本生成中是否有一個設置可以讓IDENTITY_INSERT自動開啓/關閉,因此我不必在生成的腳本中手動查看每個表並設置它?我使用SSMS,我想通過SSMS來做到這一點。SQL Server生成具有標識插入的腳本

這裏就是我得到:

INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1'); 
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2'); 

這裏就是我想:

SET IDENTITY_INSERT my_table ON 
INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1'); 
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2'); 
SET IDENTITY_INSERT my_table OFF 

回答

1

你沒有說你使用什麼工具來生成腳本,但如果你有一個工具如紅門數據比較,如果在比較中包含自動增量字段,它將爲您生成這些語句。我不知道SSMS有這樣的選擇。

如果您有Visual Studio Premium或Ultimate版本,那麼您還可以訪問具有數據比較和同步選項的DBPro(數據庫專業版)。我相信這也會爲你生成IDENTITY_INSERT語句。

+0

我使用的生成腳本... SSMS的內部選項。 SSMS內部有什麼可以做到嗎? –

+1

好的。我不相信SSMS可以讓你選擇這樣做。我只是看了看,沒有看到任何。 –

+0

我想的很多。謝謝。這太遺憾了。 –

2

我知道這是一個老問題,但接受的答案和對接受的答案的評論對於SSMS並不完全正確。

當使用生成在SQL Server Management Studio中(SSMS)的腳本任務生成數據的腳本,set identity_insert發言將包括對具有標識列的表。

在對象資源管理:任務 - >生成腳本 - > [所有表選定的表] - >高級 - > [模式與數據數據]

  • 如果表來自的腳本數據不具有具有標識屬性的列,因此不會生成set identity_insert語句。

  • 如果從編寫腳本數據的表有一個帶有標識屬性的列,它將生成set identity_insert語句。

測試&使用SSMS 2008 & SSMS 2012

在OP的情況,我猜源表沒有在源表my_table_id設置標識屬性證實,但身份屬性在目的地表中設置爲my_table_id

要獲得所需的輸出,請將表更改爲具有my_table_id具有標識屬性的腳本數據。

本文介紹了深入的措施來做到這一點(不使用SSMS設計師):Add or drop identity property for an existing SQL Server column - Greg Robidoux

  • 創建具有身份屬性

  • 轉移的新列從現有數據id列添加到新列

  • 刪除現有的id列。

  • 新列重命名爲原始列名

相關問題