2013-03-12 78 views
1

我將一個表中的值插入到另一個表中。表中有100000條記錄。但是當我開始從一個表中插入值到另一個表時,我的數據中的任何一行都有問題。我不知道這到底是什麼。那麼我怎麼能知道在哪個行值是錯誤的,因爲insert語句不完整?出錯後,停止在表格中插入任何東西。 這是我用簡單的語句:如何在sql表中找到錯誤值

INSERT INTO Person (FirstName, LastName,Email) 
SELECT FirstName, LastName, Email 
FROM Person.Contact 
+0

你有任何錯誤訊息? – 2013-03-12 09:22:18

+0

提供更多的數據 – 2013-03-12 09:23:23

+0

有一個表架構dbo中的人,並有一個表格架構中的聯繫人Person? 'dbo.Person'(null,主鍵,外鍵,唯一性,檢查,觸發器)受到了什麼限制?請爲'dbo.Person'添加完整的創建表格以及錯誤消息。要很快回答您的問題:您必須檢查'Person.Contact'的哪些行違反了'dbo.Person'中的任何約束。 – Claude 2013-03-12 09:23:53

回答

0

quesion是很難理解的,但通常的嫌疑人分別是:

  1. 試圖插入空到非空列

  2. 外鍵違規

  3. 違反約束。

  4. 試圖插入錯誤的數據類型。

請編輯你的問題添加錯誤信息。

+0

如果在表中的數據有任何問題我怎麼知道問題的意思在那一行表 – 2013-03-12 09:22:40

0

我猜Person是你的模式的名稱,所以也許你的意思是

INSERT INTO Person.Person (FirstName, LastName,Email) 
SELECT FirstName, LastName, Email 
FROM Person.Contact 
+0

如果在表中的數據有任何問題我怎麼知道問題在哪裏意味着在那一行表 – 2013-03-12 09:22:16

+0

在錯誤信息,問題,你怎麼知道你的'INSERT'語句有錯誤? – 2013-03-12 09:23:28

1

沒有強加於目標表上的約束的任何附加信息的很一般,慢的解決辦法是

  1. 遊標在選定行上循環
  2. try/catch之間插入任何行
  3. 有關異常輸出行和錯誤消息

對於您的問題的具體答案提供更多信息。

另一種方法是使用SSIS:在這裏您可以爲錯誤的行提供單獨的通道。該通道可以導致收集導致錯誤的所有行的單獨表格。