Sql-Server
執行 SQL Server 腳本時出錯
我複制
oldDatabase
為newDatabase
. 修改newDatabase
的架構。同時,
oldDatabase
的數據正在處理和更新中。我想將
oldDatabase
的數據複製到newDatabase
.我所做的是:
- 清理數據
newDatabase
- 生成僅數據腳本
oldDatabase
- 在
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