2016-08-01 39 views
2

我已存儲過程:存儲過程不返回正確的值

ALTER PROCEDURE ReplaceHtmlEntities 
    @companyName NVARCHAR(200) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @newCompanyName NVARCHAR(200); 

    SET @newCompanyName = @companyName; 
    SET @newCompanyName = REPLACE(@newCompanyName,'&','&'); 
    SET @newCompanyName = REPLACE(@newCompanyName,'"','"'); 
    SET @newCompanyName = REPLACE(@newCompanyName,''',''''); 
    SELECT @newCompanyName; 
END 
GO 

但它返回0:

DECLARE @companyName nvarchar(200), @result nvarchar(200) 

SET @companyName = N'Company name &' 

EXEC @result = [dbo].[ReplaceHtmlEntities] @companyName 

SELECT @result 

@result應該是 '公司名稱&',但它給了我「0 ' - 爲什麼?

+2

存儲過程產生併發送回呼叫客戶兩兩件事:1)的整數錯誤代碼爲「返回值「;和2)一個或多個表格結果集(由SP中的Select語句指定的東西) 您正在查看第一個整數返回值(如果沒有錯誤),默認爲零 –

+0

但我必須在SELECT中的查詢中使用@result - 我該怎麼做? – MrChudz

+0

但是,作爲用戶定義的函數(UDF)而不是存儲過程,此功能會更好 –

回答

1

存儲過程只能返回整數(ref)。

你可以從輸出參數返回,但我認爲你應該創建一個函數:

CREATE FUNCTION ReplaceHtmlEntities 
    (@companyName NVARCHAR(200)) 
RETURNS NVARCHAR(200) 
AS 
BEGIN 
    DECLARE @newCompanyName NVARCHAR(200); 

    SET @newCompanyName = @companyName; 
    SET @newCompanyName = REPLACE(@newCompanyName,'&','&'); 
    SET @newCompanyName = REPLACE(@newCompanyName,'"','"'); 
    SET @newCompanyName = REPLACE(@newCompanyName,''',''''); 

    RETURN @newCompanyName; 
END 
GO 

這是你可以執行一個功能:

DECLARE @companyName nvarchar(200), @result nvarchar(200) 
SET @companyName = N'Company name &' 

SET @result = [dbo].[ReplaceHtmlEntities](@companyName) 

SELECT @result 
+0

哦 - 當然函數 - THX非常多:) – MrChudz

+1

但使其成爲內聯UDF,而不是過程函數。 –

1

如果你叫它,請消除@result =select @result

選擇裏面的 SP會爲您生成數據。

DECLARE @companyName nvarchar(200), @result nvarchar(200) 
SET @companyName = N'Company name &' 
EXEC [dbo].[ReplaceHtmlEntities] @companyName 

但是,如果你做了它UDF倒不如,,,

Create Function dbo.ReplaceHtmlEntities(@input varChar(1000)) 
returns table As 
Return (Select Replace(Replace(REPLACE(
       @input,'&','&'), 
         '"','"'), 
         ''','''') OutVal) 

然後,所有你需要做的,叫它是

Select OutVal from dbo.ReplaceHtmlEntities('Put the companyname here') 
+0

如果語法正確,這將是一個很好的答案。 –

+0

是的,我通常使用該模板,並且在我回答這個問題時無法訪問 –

0

在SQL Server存儲過程只能返回整數。存儲過程結束時的SELECT將創建一個不是返回值的結果集。

要輸出的值形成一個存儲過程作爲一個輸出參數聲明的程序是這樣的:

ALTER PROCEDURE ReplaceHtmlEntities 
    @companyName NVARCHAR(200), 
    @newCompanyName NVARCHAR(200) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SET @newCompanyName = @companyName; 
    SET @newCompanyName = REPLACE(@newCompanyName,'&','&'); 
    SET @newCompanyName = REPLACE(@newCompanyName,'"','"'); 
    SET @newCompanyName = REPLACE(@newCompanyName,''',''''); 
END 
GO 

DECLARE @companyName nvarchar(200) = 'A & B' 

EXEC ReplaceHtmlEntities @companyName = @companyName, @newCompanyName = @companyName OUTPUT 

SELECT @companyName 

GO 
+0

我相信你的第二句話中「不」太多? – Paul

+0

謝謝。不再。 –