kac*_*apy 7 sql-server-2005 sql-server syntax functions
我刚刚创建了一个 UDF 并对其进行了测试,我发现只有在使用此语法时才有效
SELECT [PMIS].[dbo].[fnIsReportingTo] (50,1132)
Run Code Online (Sandbox Code Playgroud)
我期待它像这样工作:
select * from fnIsReportingTo (50,1132)
Run Code Online (Sandbox Code Playgroud)
或者
select fnIsReportingTo (50,1132)
Run Code Online (Sandbox Code Playgroud)
这是我的创建 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
Run Code Online (Sandbox Code Playgroud)
标量UDFS 必须用架构限定。当然,除非它在不同的数据库中,否则您不需要限定名称的数据库部分。
SELECT [dbo].[fnIsReportingTo] (50,1132)
Run Code Online (Sandbox Code Playgroud)
在 FROM 子句中,您只能使用表值函数
请参阅MSDN 中的“函数类型”
编辑:作为观察,我倾向于避免:
如果你对另一个表的每一行使用这个函数,你就有一个游标,它在 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
377 次 |
最近记录: |