2013-08-27 44 views
1

我在任何地方完全沒有使用int的時候出現這個錯誤。當int沒有使用時,int與uniqueidentifier不兼容

我有這個存儲過程

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

這裏ID是在文件類型表中的唯一標識符

當我執行以下

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 

將存儲過程的輸出分配給局部變量的語法有什麼問題嗎?謝謝。

回答

4

您正在使用的EXEC @fileGuid = procedure語法用於檢索返回值,而不是結果集。返回值僅限於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; 
+0

謝謝。我相信這對你來說只是一小塊蛋糕。我正在從編寫簡單的選擇語句過渡到編寫過程:) –

1

返回的值是一個int

CREATE PROCEDURE (Transact-SQL)

將狀態值返回到調用過程或批次以指示 成功或失敗(以及失敗的原因)。

您正在查找輸出參數。

OUT | OUTPUT

指示參數是輸出參數。使用 OUTPUT參數將值返回給過程的調用者。 文本,ntext和圖像參數不能用作OUTPUT參數 ,除非該過程是CLR過程。輸出參數可以是一個 遊標佔位符,除非該過程是CLR過程。 A 表值數據類型不能被指定爲 過程的OUTPUT參數。

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 
相關問題