2016-08-01 8 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)1つまたは複数の表形式の結果セット(SPのSelect文で指定されたもの) 最初の整数戻り値を参照しています(エラーがない場合)。デフォルトでは0です。 –

+0

どのように私はそれを行うことができますか? – 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) 

その後、あなたはそれを呼び出すために行うために必要なのは、SQL Serverの

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

構文が正しいなら、これはすばらしい答えです。 –

+0

はい、私は通常テンプレートを使用し、私はこれに応答したときにアクセスしませんでした –

0

ストアドプロシージャです整数だけを返すことができます。ストアドプロシージャの最後の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

私はあなたが第2文であまりにも多くの "not"を持っていると思いますか? – Paul

+0

ありがとうございます。もう違います。 –

関連する問題