2013-09-24 38 views
1

我有一個當前複製到三個不同位置的數據庫。它用於應用程序,所有表格,存儲過程和文章也被選中以進行復制。無法執行存儲過程,但存儲過程中的更新語句工作

當我嘗試更新ContactCSR,通過存儲的過程中,我得到以下錯誤:

Msg 2627, Level 14, State 1, Procedure UpdateContactCSRs, Line 14 Violation of PRIMARY KEY constraint 'PK_ContactCSRs'. Cannot insert duplicate key in object 'dbo.ContactCSRs'. The duplicate key value is (3443001, dand). The statement has been terminated..

存儲過程的內容如下:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[UpdateContactCSRs] @Contact int, 
    @CSR varchar(50), 
    @Memo varchar(max), 
    @Notify bit, 
    @OldCSR varchar(50) 
AS 
BEGIN 
    UPDATE ContactCSRs SET CSR = @CSR,Memo = @Memo, Notify = @Notify WHERE Contact = @Contact AND CSR = @OldCSR; 
END 

然而,我當在其工作的過程中運行更新命令。

不完全確定爲什麼會發生這種情況,即使update語句有效,存儲過程也不起作用。

這裏是存儲過程的命令,我運行:

exec UpdateContactCSRs 3443001, 'dand','Relationship Manager',1,'AndyK' 

而且這裏是我運行的是更新語句:

UPDATE ContactCSRs SET CSR = 'dand',Memo = 'Relationship Manager', Notify = 1 WHERE Contact = 3443001 AND CSR = 'AndyK' 
+1

您是否使用與存儲過程一起嘗試的完全相同的參數運行update命令? – Szymon

+0

你確定你傳遞相同的參數給存儲過程和更新語句嗎?基本上,當您通過應用程序傳遞語句時,它可能與您手動運行更新語句時不同。 – logixologist

+0

主鍵錯誤意味着您正在執行的UPDATE對這些字段有一個約束,要求它是唯一的,並且您已將其設置爲數據庫中已存在的某個約束。 – logixologist

回答

0

如果指定存儲過程的參數名稱打電話,你還會得到錯誤嗎?

exec UpdateContactCSRs @Contact = 3443001, @CSR = 'dand', @Memo = 'Relationship Manager', @Notify = 1, @OldCSR = 'AndyK' 
+0

這仍然不起作用。我收到相同的錯誤消息。約束或表的索引有什麼問題嗎? – user2684009

+0

我不認爲這個約束或索引有什麼問題,我認爲你沒有看到這個sproc背後發生了什麼。運行sproc並在運行時捕獲跟蹤信息(在SSMS中的查詢菜單下,「SQL Server Profiler中的跟蹤查詢」 –

+0

感謝它似乎現在正在工作,我做了一個改變......但似乎它沒有當我對訂閱服務器執行命令時,它會失敗,現在它可以工作 – user2684009