2011-11-01 101 views
1

我需要幫助才能從存儲過程返回'xmlstring'(varchar(MAX))。它工作正常,如果我測試來計算'xmlstring'的數量,但我如何得到實際的字符串返回insted?

ALTER PROCEDURE dbo.sp_test AS
DECLARE @Ret int
SELECT @Ret = COUNT(xmlstring) FROM database WHERE (id = 1)
RETURN @Ret


我wan't做這樣的事情,但它是不正確:

ALTER PROCEDURE dbo.sp_test AS
DECLARE @Ret varchar(MAX)
SELECT @Ret = TOP (1) xmlstring FROM database WHERE (id = 1)
RETURN @Ret
存儲過程return varchar(MAX)

回答

0

呀類似的東西:

ALTER PROCEDURE dbo.sp_test AS 
DECLARE @Ret varchar(MAX) 
SELECT TOP (1) xmlstring FROM database WHERE (id = 1) 

你不需要回報,除非它是一個功能

select語句將被退回,你可以把一個以上,這些都是調用的ResultSet

+0

我想將其用作函數(如果可能的話)。 – Mikael

+0

因此,丟失word程序,並把函數,而不是: – GregM

+0

如果我使用'ExecuteScalar()'我得到第一行中的第一個單元格,它的作用方式與使用RETURN相同。 (我怎麼會錯過這個問題?解決問題了!) – Mikael

0
SELECT TOP (1) xmlstring FROM database WHERE (id = 1) 

如果你想設置一個局部標變量,你現在是它需要的方式是

ALTER PROCEDURE dbo.sp_test AS 
DECLARE @Ret varchar(MAX) 
Set @Ret = TOP (1) xmlstring FROM database WHERE (id = 1) 
RETURN @Ret 
+0

我收到一個錯誤:「關鍵字'TOP'附近的語法不正確。」與我的代碼上面,並更改爲「設置」而不是「選擇」。 – Mikael

0

就在:

ALTER PROCEDURE dbo.sp_test AS 
SELECT xmlstring FROM database WHERE (id = 1) 

你不需要一個變量,你不需要TOP,除非id不是唯一的(在這種情況下,你可能會考慮除TOP之外的其他東西,比如MIN(),MAX()或其他一些過濾器標準,因爲您無法真正預測TOP將返回哪條記錄)