0

私が遊んでいるこのコードスニペットがあります(一般的な名前を許してください):

create function GetList
(@d1 varchar(3), @d2 varchar(3), @d3 varchar(3))
returns table
as
return
with List
as
(
    select x.pattern
        from (values (@d1), (@d2), (@d3)) as x(pattern)
)
select * from list

これは最終的にはユーザー提供のリストになり、他の何かを照会するために使用されますが、これをいじってみると興味がわいてきました。私が走るとしたら

select * from GetList('1111111','222','333')

それぞれに 3 文字だけを入力した場合と同じ結果が得られます。varchar パラメーターを文字に制限したので、他のパラメーターは完全に無視されますか? このように「オーバーフロー」した varchar パラメータがある場合に発生する可能性のある潜在的な不快感はありますか (もちろん、文字列の末尾でのデータの損失を除く)

4

1 に答える 1

2

パラメータの長さを 3 に制限したため、他の文字は完全に無視されました。

発生する可能性のある唯一の問題は、実際に長さが 3 を超える文字を返したい場合です。

たとえば、 を渡し、1234567実際に値全体が必要な場合は、 のみが取得されます123

入力パラメーターを 3 に制限している場合、それより長い値を渡そうとする理由はありません。より長い値を渡す可能性がある場合は、パラメーターの長さを増やす必要があります。

于 2013-03-28T18:12:59.300 に答える