2011-10-06 74 views
-1

我試圖根據Project_CSTM表中的數據更新Contacts_CSTM表中的數據。這是我使用的查詢,但我得到一個錯誤:更新選擇語句多連接

ALTER PROCEDURE Insurance_Check_Expiration 
    @ID_C AS NVARCHAR (55) = ID_C 
    AS 
BEGIN  
SET NOCOUNT ON 
IF EXISTS(SELECT * FROM CONTACTS_CSTM WHERE ID_C = @ID_c) 

Update contacts_cstm set insurance_expired_label_c = 'INSURANCE EXPIRED' 
WHERE DRIVERS_LICENSE_NUMBER_C IS NOT NULL AND @ID_C= 
(SELECT cc.id_c 
FROM PROJECT_CSTM PC 
JOIN PROJECT P 
ON P.ID = PC.ID_C 
JOIN PROJECT_RELATION PR 
ON PR.PROJECT_ID = P.ID 
JOIN CONTACTS C 
ON C.ID = PR.RELATION_ID 
JOIN CONTACTS_CSTM CC 
ON CC.ID_C = C.ID 
WHERE CC.ID_C = @ID_C AND INSURANCE_EXPIRED_C ='1') 

謝謝「從字符串轉換爲uniqueidentifier時轉換失敗」。

+0

聽起來像是你是一個GUID比較字符串值...你能告訴使用的列及其數據類型? – AJC

回答

1

其中之一,你將@ID_C的值設置爲一個值(ID_C),這顯然不是有效的GUID。

這是您所做的功能等同物,運行它,您將得到相同的錯誤。

CREATE PROCEDURE Insurance_Check_Expiration 
    @ID_C AS NVARCHAR (55) = ID_C 
    AS 
BEGIN  
DECLARE @A UNIQUEIDENTIFIER 

SET @A = @ID_C 


END 

exec Insurance_Check_Expiration 

編輯:這是一個基於業務方案的意見的功能例如:

CREATE TABLE GUIDExample (ID_C UNIQUEIDENTIFIER) 
GO 
CREATE PROC GuidExample_Insert @ID_C UNIQUEIDENTIFIER 
AS 
BEGIN 
    SELECT @ID_C 
END 
GO 
CREATE TRIGGER GUID_Example ON GUIDExample 
AFTER INSERT 
AS 
    DECLARE @ID_C UNIQUEIDENTIFIER 

    SELECT @ID_C = ID_C 
    FROM Inserted 


    EXEC GuidExample_Insert @ID_C 
GO 

DECLARE @SampleGUID UNIQUEIDENTIFIER 

SET @SampleGUID = NEWID() 

INSERT GUIDExample (ID_C) 
VALUES(@SampleGUID) 
+0

感謝您的輸入Wil。我與w/SQL鬥爭,也許你可以幫助我理解。如何編寫更新語句,以便只更新包含記錄ID的記錄?這個問題有意義嗎? – Stan

+0

proc設置爲接受輸入參數。在'ALTER PROCEDURE'之後將'@ID_C = ID_C'更改爲'@ ID_C',並確保在調用時將有效的GUID傳遞給過程。你的過程調用應該看起來像'EXEC Insurance_Check_Expiration'你試圖通過的GUID'。它可能是一個變量,它可能是一個應用程序的參數,只要它是一個唯一標識符就可以工作。更好的是,如果這是傳入proc的值實際上是什麼,那麼將@ID_C從'NVARCHAR(55)'更改爲'UNIQUEIDENTIFER'。 – Wil

+0

修改過程之後,我有@ID_C AS UNIQUEIDENTIFIER。 EXEC Insurance_Check_Expiration是觸發器,是我把EXEC Insurance_Check_Expiration @ID_C放在哪裏?我知道我表現出我的無知,但除非你提出問題,否則你不會學習,不管他們多麼愚蠢。我喜歡你的幫助Wil – Stan