Sql-Server

執行 SQL Server 腳本時出錯

  • August 17, 2013

我複制oldDatabasenewDatabase. 修改newDatabase的架構。

同時,oldDatabase的數據正在處理和更新中。

我想將oldDatabase的數據複製到newDatabase.

我所做的是:

  1. 清理數據newDatabase
  2. 生成僅數據腳本oldDatabase
  3. newDatabase.

我收到了很多錯誤消息,例如:

Cannot insert explicit value for identity column in table 'MyTableName' when   
IDENTITY_INSERT is set to OFF.

Invalid column name 'MyColumnName'.

Violation of PRIMARY KEY constraint 'PK_MyTableName'. Cannot insert duplicate  
key in object 'dbo.MyTableName'.

一些表和行數據受到影響。但是,具有上述錯誤的表不受影響。我該如何解決?有沒有最好的方法來製作這些東西?

附言

我使用這個命令執行我的腳本,

sqlcmd -S myServerName -U userName -P passowrd -i PathOfMyScriptFile

從外觀上看,您遇到了三種不同類型的問題。


Cannot insert explicit value for identity column in table 'MyTableName' when   
IDENTITY_INSERT is set to OFF.

您有身份列。對於具有標識列的表,您有三個選擇。首先,當您進行插入時,請排除身份列。其次從目標表的列中刪除標識屬性。第三次使用identity_insert。要使用 identity_insert,您首先為表打開它。

SET IDENTITY_INSERT MyTableName ON

然後你做你的插入。注意:您必須列出插入中的所有列。

INSERT INTO MyTableName (fieldlist) VALUES (valuelist)

不是

INSERT INTO MyTableName VALUES (valuelist)

最後但並非最不重要的一點是確保再次關閉 identity_insert。對於給定的連接,一次只能為一個表打開 Identity_insert。

SET IDENTITY_INSERT MyTableName OFF

這是插入標識列的一個很好的演練。


Invalid column name 'MyColumnName'.

你說你改變了’newDatabase’的結構。那麼我的猜測是你刪除了’MyColumnName’。要麼從插入中排除它,要麼重新添加列。您要麼需要確保結構newDatabase匹配oldDatabase,要麼考慮插入中的差異。


Violation of PRIMARY KEY constraint 'PK_MyTableName'. Cannot insert duplicate  
key in object 'dbo.MyTableName'.

最後但並非最不重要的一點是,您將數據插入到newDatabase數據已經存在的情況下。或者至少主鍵值已經存在於newDatabase.MyTableName. 我的建議是,如果您有任何機會進行更新以及插入將您的INSERT語句更改為MERGE語句。否則,在您的語句中添加一個WHERE NOT EXISTS或類似於該語句的內容,以排除任何主鍵已存在於.SELECT``INSERT``newDatabase.MyTableName

引用自:https://dba.stackexchange.com/questions/48282