2015-04-23 149 views
2

我想有這個過程,因爲能夠得到UNIQUEIDENTIFIER值的輸出正常工作,但是當我嘗試執行它給我的錯誤查詢操作數類型衝突:int與uniqueidentifier不兼容。如何使唯一標識符的OUTPUT

操作數類型衝突:int與uniqueidentifier不兼容

我嘗試過不同的事情,但無法找到解決方案。

這裏是我的代碼

-- ================================================= 
-- Example: [mob].[procedureName] 369, NULL, 23741, "somePath", "SomeName", "clientName", NULL 
-- Example: [mob].[procedureName] 
-- Example: [mob].[procedureName] 
-- ================================================= 
ALTER PROCEDURE [mob].[uspInsertEmail]  
(
@ParamCompany VARCHAR(50), 
@ParamDate DATETIME, 
@ParamCreatedBy VARCHAR(50), 
@ParamFilePath VARCHAR(200), 
@ParamFileName VARCHAR(100), 
@ParamClientFileName VARCHAR(100), 
@ParamGUID UNIQUEIDENTIFIER OUTPUT 
) 
AS 
DECLARE @GUID UNIQUEIDENTIFIER=NEWID() 

INSERT INTO [mob].[tblEmail] 
(   
[Company], 
[GuidString], 
[Date], 
[CreatedBy] 
) 
VALUES 
(   
@ParamCompany, 
@GUID, 
@ParamDate, 
@ParamCreatedBy 
)        
INSERT INTO [mob].[tblEmailAttachment] 
(   
[Email], 
[FilePath], 
[FileName], 
[ClientFileName], 
[CreatedBy] 
) 
VALUES     
(   
IDENT_CURRENT ('mob.tblEmail'),    
@ParamFilePath, 
@ParamFileName, 
@ParamClientFileName, 
@ParamCreatedBy 
) 

SELECT @GUID AS EmailGuid 
SET @ParamGUID = @GUID 

我讀,我需要做的UNIQUEIDENTIFIER是在OUTPUT條款,但不知道究竟如何使@GUID作爲OUTPUT

+0

你擁有它的方式將返回你的guid變量。如果您希望將其作爲出站參數,則需要使用關鍵字OUTPUT將其定義在參數列表中。 –

+5

順便說一下,我建議在第二個插入語句中使用SCOPE_IDENTITY()而不是IDENT_CURRENT來避免併發問題。 –

+0

感謝您的迴應,但是即使我沒有將該值作爲參數傳遞,也會這樣嗎?因爲它被聲明和實例化爲局部變量。 – AndresM

回答

1

我會使這個簡單得多。像這樣的東西。

-- ================================================= 
-- Example: [mob].[procedureName] 369, NULL, 23741, "somePath", "SomeName", "clientName", NULL 
-- Example: [mob].[procedureName] 
-- Example: [mob].[procedureName] 
-- ================================================= 
ALTER PROCEDURE [mob].[uspInsertEmail]  
(
    @ParamCompany VARCHAR(50), 
    @ParamDate DATETIME, 
    @ParamCreatedBy VARCHAR(50), 
    @ParamFilePath VARCHAR(200), 
    @ParamFileName VARCHAR(100), 
    @ParamClientFileName VARCHAR(100), 
    @ParamGUID UNIQUEIDENTIFIER OUTPUT 
) 
AS 
    set nocount on; 

    select @ParamGUID = NEWID(); 

    INSERT INTO [mob].[tblEmail] 
    (   
     [Company], 
     [GuidString], 
     [Date], 
     [CreatedBy] 
    ) 
    VALUES 
    (   
     @ParamCompany, 
     @ParamGUID, 
     @ParamDate, 
     @ParamCreatedBy 
    )        

    INSERT INTO [mob].[tblEmailAttachment] 
    (   
     [Email], 
     [FilePath], 
     [FileName], 
     [ClientFileName], 
     [CreatedBy] 
    ) 
    VALUES     
    (   
     SCOPE_IDENTITY(),    
     @ParamFilePath, 
     @ParamFileName, 
     @ParamClientFileName, 
     @ParamCreatedBy 
    ) 
+0

它的工作,感謝您的答案。事實證明,程序是正確的,問題是程序名稱拼寫錯誤,誤導了錯誤。謝謝+1 @Sean Lange – AndresM

+0

我的迴應對你有用,你應該將它標記爲答案。 –

+0

我想他得到了他想要的東西,從來沒有回到SO(或者他經常旋轉帳戶)。但是,這是一個upvote;) – DanteTheSmith

相關問題