当在任何地方绝对没有使用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
将存储过程的输出分配给局部变量的语法有什么问题吗?谢谢。
答案 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