2

SQL Server 2008(TSQL)では、次のようなストアドプロシージャを作成しました。

CREATE PROCEDURE SP_1_10_2
AS
declare @mostValuableBook nvarchar(255)
SELECT @mostValuableBook = Name
FROM books
WHERE price =
    ( SELECT MAX(price)
      FROM books
      WHERE izd LIKE '%BHV%' );
return @mostValuableBook
GO

しかし、私がそれを実行しようとしているとき:

declare @x nvarchar(255)
EXECUTE @x = SP_1_10_2;
SELECT 'The most expensive BHV book:', @x AS 'Name'
GO

エラーが発生しました:

nvarchar値「InternetExplorer3original」をデータ型intに変換するときに変換に失敗しました。

問題は一線を画しているようです

EXECUTE @x = SP_1_10_2;

何が悪いのか教えていただけますか?なぜintに変換しようとしているのですか?

4

2 に答える 2

6

RETURNnvarcharあなたが持っているような/を返すために使用することはできませんvarchar。RETURNは整数を返すために使用されます。これは、ある種のステータスコード1 = True / 0=Falseとして表すことができます。返品の詳細については、http://msdn.microsoft.com/en-us/library/ms174998.aspxをご覧ください。

あなたの場合、OUTPUTC#またはC++でのpass-by-refと同様の変数を使用する必要があります。変数をsprocに渡し、sprocがそれを変更すると、。の後に期待される結果が得られますSELECT...

パラメータが出力パラメータになるように変更します。

CREATE PROCEDURE SP_1_10_2
@mostValueableBook nvarchar(255) output
AS
SELECT @mostValuableBook = Name
FROM books
WHERE price =
    ( SELECT MAX(price)
      FROM books
      WHERE izd LIKE '%BHV%' );
SELECT @mostValuableBook
GO

そのように呼んでください:

DECLARE @theValBook nvarchar(255)
EXECUTE SP_1_10_2 @mostValuableBook = @theValBook output

次に、あなたは言うことができます:

SELECT 'Most expensive book is', @theValBook

于 2012-11-26T19:06:14.353 に答える
1

数値の戻りコードに依存する代わりに、必要な値を返す関数を作成することもできます。SQL 関数は非常に便利です。LIKE 演算子を使用して最大のクライアント ID を持つ姓を返す以下の例を参照してください。

Use MYDB
GO

CREATE Function fn_LastClientIdByName
(
@nameLike NVARCHAR(10)
)
RETURNS NVARCHAR(100)
AS 

BEGIN
DECLARE @result nvarchar(100)
DECLARE @clientName NVARCHAR(100)

SELECT top 1  @clientName = [clientLast] + ' ' + [clientFirst]   
FROM [dbo].[duiClientOnly]
WHERE clientLast like @nameLike + '%'
order by clid desc

select @result = @clientName
return @result
END
于 2013-01-08T23:36:07.673 に答える