なぜ私は自分のUDFに直接電話できないのですか?なぜ私はそれを3レベルに深く資格を得る必要があるのですか?
-
16-10-2019 - |
質問
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
所属していません dba.stackexchange