2013-02-14 43 views
0

讓我們考慮一個使用ODBC驅動程序連接到SQL Server下面的連接字符串:錯誤,同時插入行到SQL Server與身份

Driver={SQL Server Native Client 10.0};Server=xxx.xx.xx.xx,xxxx;Database=mydata;Uid=xx;Pwd=xxxxxx; 
  • 數據庫類型:SQL服務器
  • 驅動程序:SQL服務器 - ODBC本地客戶端10.0
  • 提供商類型:System.Data.Odbc

我執行此COM普通話:

SET IDENTITY_INSERT db1.table ON; 

INSERT INTO db1.table 
    SELECT * FROM db.table 

SET IDENTITY_INSERT db1.table OFF; 

我得到錯誤:

* ERROR [23000] [微軟] [SQL Server本機客戶端10.0] [SQL服務器]在表中標識列的 明確的價值' db1.table」可以在使用的列列表,只 指定,並且IDENTITY_INSERT爲ON。*

我有什麼爲了解決這個問題,現在怎麼辦?

等待您的答覆..

+1

錯誤消息已足夠清楚。您需要在INSERT ... SELECT語句中指定每個目標和源列。 – Matt 2013-02-14 09:35:19

回答

2

你必須明確地列出列插入:

INSERT db1.table(IdColumn, Column1, Column2) 
SELECT IdColumn, Column1, Column2 
FROM db.table 

您應該指定列名作爲標準的做法無論如何要避免的錯誤在爬行(如列錯位,新增列等)。當使用IDENTITY_INSERT時,這實際上是由SQL Server執行的,根據錯誤消息。

0

當用戶試圖將包含特定標識值的行插入到包含標識列的表中時,會發生此錯誤。根據您的SQL語句執行以下命令:

您的SQL語句之前:

SET IDENTITY_INSERT <tablename> ON 

- 您必須做出一個列清單爲您INSERT語句:

INSERT Into tableA ([col1], [col2], [col3], [col4], [col5]) 
SELECT [col1], [col2], [col3], [col4], [col5] FROM tableB 

不喜歡:

"INSERT Into tableA SELECT ........" 

在您的SQL語句後:

SET IDENTITY_INSERT <tablename> OFF