1

テーブルの値をレポートのコンマ結合文字列にマップする手順があります。

残念ながら、ユーザー インターフェイスのバグにより、一部の値'none'null. 値は単なる文字列であると確信している'none'ので、手順はそのように処理しようとします。

に遭遇した場合、プロシージャは何も返さないはず'none'ですが、そうではありません。たとえば、以下に渡す'none'@DrugUse、何も返されないはずですよね? ただし、それでも返され'd'ます。それで、私は何を間違っていますか?

ALTER FUNCTION [dbo].[MapConsumerAdvice] 
(
    @AdultThemes as VarChar,
    @DrugUse as VarChar
)
RETURNS VarChar(20)
AS
BEGIN
    DECLARE @Result as VarChar(999)

    SET @Result = ''

    IF (@AdultThemes > 0) 
       SET @Result = ',' + 'a'

    IF (@DrugUse IS NOT NULL) AND (@DrugUse != 'none') 
        SET @Result = @Result + ',' + 'd'

    RETURN SUBSTRING(@Result, 2, LEN(@Result))
4

2 に答える 2

2

varcharパラメータの長さがありません:

create FUNCTION [dbo].[MapConsumerAdvice_version2] 
(
    @AdultThemes as VarChar(10),
    @DrugUse as VarChar(10)
)

長さを指定しない場合、値の長さは等しくないnoneため、 が返されdます。関数の 2 つの異なるバージョンのデモを含む SQL Fiddle を参照してください。

于 2013-04-29T00:08:25.237 に答える
0

オンライン ブック:

varchar [( n | 最大 ) ]

データ定義または変数宣言ステートメントで n が指定されていない場合、デフォルトの長さは 1 です。CAST 関数および CONVERT 関数を使用するときに n が指定されていない場合、デフォルトの長さは 30 です。

試す:

-- Remark 1:
declare @a varchar = 'abcd'
select @a, len(@a)


-- Remark 2:
select cast(1.2345678901234567890123456789 as varchar)
于 2013-04-29T00:53:49.623 に答える