0

SQL Server 2005で、次のクエリを起動した場合を想定してください。

SELECT CHICKEN_CODE FROM ALL_CHICKENS WHERE MY_PARAMETER = 'N123123123';

あなたが得る:

31

結果として。

ここで、の値が与えられると、テーブルにMY_PARAMETERある対応するの値を生成する関数を作成したいと思います。CHICKEN_CODEALL_CHICKENS

SQLServer2005で次のストアド関数を作成しました。

ALTER FUNCTION [dbo].[determines_chicken_code]
(
    @input_parameter                         VARCHAR 
)
RETURNS varchar
AS 
BEGIN
    DECLARE @myresult varchar

    SELECT @myresult  =  CHICKEN_CODE
    FROM dbo.ALL_CHICKENS
    WHERE MY_PARAMETER = @input_parameter

    RETURN @myresult
END

しかし、次のクエリを起動すると:

SELECT DBO.determines_chicken_code('N123123123') 

それは以下をもたらします:

NULL

なんで?

何卒よろしくお願い申し上げます。

4

4 に答える 4

3

このようにvarchar変数の長さを定義します

varchar(100)

100(または選択した任意の長さ) がない場合、その長さは1あり、 where句は正しい結果を除外します。

于 2012-06-22T11:07:56.790 に答える
2

varchar の長さを指定します (例: varchar(100))。長さがなければ、varchar = 1 文字です。

于 2012-06-22T11:08:26.683 に答える
1

他の PS によると、長さを指定していないため、@myresult に格納できるのは 1 文字のみです。bcoz 1 文字の長さは、Varchar データ型のデフォルトです。

最初の文字ではなく、NUll を取得する理由:

複数のレコードが ALL_CHICKENS テーブルの句に基づいてフィルター処理されているWhere場合、CHICKEN_CODE 列の値は ALL_CHICKENS テーブルの最後の行から取得されます。

最終行の CHICKEN_CODE 列に null 値があるようです。

于 2012-06-22T11:14:15.060 に答える
1

デフォルトでは varchar の長さが 1 であるため、@input_parameter、@myresult の長さを指定します。

于 2012-06-22T11:25:48.137 に答える