没有int用法时,int与uniqueidentifier不兼容

时间:2013-08-27 17:28:05

标签: sql sql-server

当在任何地方绝对没有使用int时,我收到此错误。

我有这个存储过程

 ALTER procedure [dbo].[usp_GetFileGuid] @fileType varchar(25)
 as 
 select [id] from fileTypes where dirId = @fileType

此处id是fileTypes表中的uniqueidentifier

当我执行以下

 declare @fileGuid uniqueidentifier
 exec @fileGuid = usp_GetFileGuid 'accounts'
 print @fileGuid

我收到以下错误

 (1 row(s) affected)
 Msg 206, Level 16, State 2, Procedure usp_GetFileGuid, Line 0
 Operand type clash: int is incompatible with uniqueidentifier

将存储过程的输出分配给局部变量的语法有什么问题吗?谢谢。

3 个答案:

答案 0 :(得分:4)

您正在使用EXEC @fileGuid = procedure语法,该语法用于检索 return 值,而不是结果集。返回值仅限于INT,并且只应用于返回状态/错误代码,而不是数据。

您要做的是使用OUTPUT参数:

ALTER procedure [dbo].[usp_GetFileGuid] 
  @fileType varchar(25),
  @id UNIQUEIDENTIFIER OUTPUT
AS
BEGIN
  SET NOCOUNT ON;
  SELECT @id = [id] from dbo.fileTypes where dirId = @fileType;
  -- if the procedure *also* needs to return this as a resultset:
  SELECT [id] = @id;
END
GO

然后用于:

declare @fileGuid uniqueidentifier;
exec dbo.usp_GetFileGuid @fileType = 'accounts', @id = @fileGuid OUTPUT;
print @fileGuid;

答案 1 :(得分:1)

返回的值是一个int,因为它是执行的状态

来自CREATE PROCEDURE (Transact-SQL)

  

将状态值返回给调用过程或批处理以指示   成功或失败(以及失败的原因)。

您正在寻找输出参数。

  

OUT |输出

     

表示该参数是输出参数。使用   OUTPUT参数将值返回给过程的调用者。   text,ntext和image参数不能用作OUTPUT参数,   除非该程序是CLR程序。输出参数可以是a   游标占位符,除非该过程是CLR过程。一个   table-value数据类型不能指定为a的OUTPUT参数   过程

答案 2 :(得分:1)

 create procedure [dbo].[usp_GetFileGuid] @fileType varchar(25),@uuid uniqueidentifier output
 as 
 select @uuid=[id] from fileTypes where dirId = @fileType 

 declare @fileGuid uniqueidentifier
 exec usp_GetFileGuid 'accounts',@fileGuid output
 print @fileGuid