2012-02-09 29 views
0

我正在編寫一個基於Web的導入器來將數據從一個數據庫導入到另一個數據庫。由於數據被加載到具有標識的表中,我需要在執行插入語句之前啓用Identity_Inserts。我生成了需要運行到List中的SQL語句,我想要做的事情是在循環執行命令之前將IDENTITY_INSERT設置爲ON,然後將其設置爲在完成後退出。我將一次執行一個命令,因爲我想跟蹤哪些命令失敗。從ASP.Net設置IDENTITY_INSERT

我試着在啓動循環之前執行SET IDENTITY_INSERT [TABLE NAME] ON,但這不起作用。

我該如何完成我想要做的事,或者有沒有人有任何其他想法?

+0

編輯您的問題以包含您的代碼。 – 2012-02-09 23:36:10

+0

你可以發佈你的代碼嗎?我看不到任何理由爲什麼這不起作用? – Liath 2012-02-09 23:36:18

+0

您是否在聲明中包含架構所有者?如果表格不在dbo模式下,那麼您肯定會要求設置這個表格。在 – SCB 2012-02-09 23:49:24

回答

0

https://connect.microsoft.com/SQLServer/feedback/details/517923/set-identity-insert-already-on-error-message-always-returns-dbo-schema-name

SQL 2K8兩者BOL指出:「在任何時候,在會話中只有一個表的IDENTITY_INSERT屬性設置爲ON。如果某個表已將此屬性設置爲ON,和SET IDENTITY_INSERT ON語句針對另一個表發出,SQL Server返回一條錯誤消息,指出SET IDENTITY_INSERT已經打開,並報告它設置爲ON的表。

所以我想,你需要在循環結束時將其設置爲OFF?

0

提升的權限必須執行SET IDENTITY_INSERT選項,檢查您的用戶符合其中的一個:
用戶必須擁有該對象,或者是sysadmin固定服務器角色的成員,或者db_owner和​​固定數據庫角色。

+0

上設置Identity_Insert xxx.tablename在我執行每個語句之前添加SET IDENTITY_INSERT權限時,它能正常工作,所以我不認爲這是問題所在。 – MillinMo 2012-02-10 00:12:46

+0

如果db用戶有權運行數據庫插入,那麼它可能與您如何從.NET發送命令有關,我們需要您的代碼來就此提供建議 – Liath 2012-02-10 09:36:54