17
create function Xtest
(@d1 varchar(3)=null
,@d2 varchar(3)=null)
returns table 
as
return 
with code_list(code_pattern)
as
(
    select x.code_pattern
        from (values (@d1),(@d2)) as x(code_pattern)
        where x.code_pattern is not null
),y
as
(
    select substring(code,1,3) as code
        from tblicd
        where substring(code,1,3) in 
        (
            select * from code_list
        )
)

select * from y 

それが完全に終了したときに意味をなす私の機能です。このクエリを実行しようとして、2 つのパラメーターを指定しないと失敗します。ストアド プロシージャと同じコードがあり、パラメーターを 1 つだけ入力すると、正常に機能し、2 番目のパラメーターに null が割り当てられます。nullストアド プロシージャでできるように、パラメーターが指定されていない場合にパラメーター値として渡す方法はありますか?

関数はコンパイルされます。

4

1 に答える 1

46

関数を呼び出すときは、パラメーターを省略できません。これは、構文で間違っているわけではありません。単に SQL Server でサポートされていないだけです。ストアド プロシージャには省略可能なパラメーターがありますが、関数にはありません。

ただし、次のものを指定できますdefault

SELECT code FROM dbo.Xtest(default, default);

または、この場合、デフォルトがわかっている場合は、次のNULLことができます。

SELECT code FROM dbo.Xtest(NULL, NULL);

また、オブジェクト、特に関数を作成および参照するときは、常にスキーマ プレフィックス(この場合は) を使用してください。dbo.

于 2013-03-28T19:28:36.287 に答える