なぜ私は自分のUDFに直接電話できないのですか?なぜ私はそれを3レベルに深く資格を得る必要があるのですか?

dba.stackexchange https://dba.stackexchange.com/questions/1221

質問

UDFを作成してテストしたばかりです。この構文を使用したときにのみ機能していることがわかりました

SELECT [PMIS].[dbo].[fnIsReportingTo] (50,1132)

私はそれがこのように機能することを期待していました:

select * from fnIsReportingTo (50,1132)

また

select fnIsReportingTo (50,1132)

これが私の作成SQLです:

create function fnIsReportingTo
(
@BossID int,
@EmployeeID int)
RETURNs bit
AS
begin
declare @ret bit
    if exists (select * from dbo.fnGetEmployeeHierarchy(@BossID) where employeeID=@employeeID)
        select @ret=1
    else
        select @ret=0
return @ret
end
役に立ちましたか?

解決

スカラー UDFSはスキーマで資格を取得する必要があります。もちろん、別のデータベースに含まれていない限り、適格名のデータベース部分は必要ありません。

SELECT [dbo].[fnIsReportingTo] (50,1132)

From句では、使用することのみができます 評価されたテーブル 関数

見る 「機能の種類」 MSDNで

編集:観察として、私は避ける傾向があります:

  • Nesting UDFSこれ
  • スカラーUDFでテーブルルックアップを使用します

別のテーブルの各行にこの関数を使用すると、外側の列ごとにUDFのテーブルを反復するカーソルがあります

これでさえより良いです。現在、テーブルが評価され、ビューのように拡張されています。

create function fnIsReportingTo (
    @BossID int,
    @EmployeeID int)
RETURNs table
AS
return (
      select CAST(COUNT(*) AS bit) AS FooBar
      from dbo.fnGetEmployeeHierarchy(@BossID)
     where employeeID=@employeeID)
GO
ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top