2011-03-25 66 views
12

是否可以在變量中分配從exec存儲過程返回的值?set @var = exec stored_procedure

喜歡的東西

DECLARE @count int 
SET @count = Execute dbo.usp_GetCount @Id=123 
+0

Yopur問題詢問'EXEC @ sql'但例如你給調用存儲的過程。你需要什麼? – 2011-03-25 23:06:40

回答

24

您可以使用sp_executesql代替exec分配給標量輸出參數

DECLARE @out int 

EXEC sp_executesql N'select @out_param=10', 
        N'@out_param int OUTPUT', 
        @[email protected] OUTPUT 

SELECT @out 

對於exec我只知道如何使用可變

表做
declare @out table 
(
out int 
) 

insert into @out 
exec('select 10') 

select * 
from @out 

對於存儲的pro也可以使用output參數或返回碼。後者可以只返回一個整數,通常優先返回錯誤代碼而不是數據。下面將演示這兩種技術。

create proC#foo 
@out int output 
as 
set @out = 100 
return 99 

go 

declare @out int, @return int 

exec @return = #foo @out output 

select @return as [@return], @out as [@out] 

drop proC#foo 
+0

謝謝。我想在我的SP中做這樣的事情;使用XMLNAMESPACES(DEFAULT'http://abc.com')SET @out =(SELECT XmlResult.value('count(// subjects/subject)','int') FROM @XmlTable)但是我得到語法錯誤。這讓我瘋狂 – BumbleBee 2011-03-25 23:40:15

+0

使用'SELECT @out = XmlResult.value'將它分配給一個標量變量。 – 2011-03-25 23:44:34

+0

謝謝。我看到消息(1行受影響),但沒有SELECt @out = xmlResult.Value的結果...我怎樣才能看到結果? – BumbleBee 2011-03-25 23:53:43

23

如果您在proc使用RETURN

DECLARE @count int 
EXECUTE @count = dbo.usp_GetCount @Id=123 

OUTPUT參數

DECLARE @count int 
EXECUTE dbo.usp_GetCount @Id=123, @count OUTPUT 

重定向結果以將臨時表/表變量

DECLARE @count int 
DECLARE @cache TABLE (CountCol int NOT NULL) 
INSERT @cache EXECUTE dbo.usp_GetCount @Id=123 
SELECT @count = CountCol FROM @cache 

你不能從存儲的proc分配一個記錄集直接一個標量變量

10

像往常一樣,很多方法可以做到這一點,但最簡單的就是:

DECLARE @count int 

Execute @count = dbo.usp_GetCount @Id=123 
+1

是的,這是可行的,但如果你不想輸入計數值並使用它。這不起作用。 – Abe 2016-02-29 10:30:26

相關問題