2015-04-23 148 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

相关问题