0

使用 TSQL 有没有办法确定 UDF 是返回标量值还是表值?

我检查了此查询的结果,但看不到基于类型的函数有任何差异:

select * from sysobjects where type = 'FN'

谢谢。

4

4 回答 4

2

实际上你快到了:)

标量函数被列为FNin类型sysobjects,表函数被列为 type TF

SELECT * from sysobjects WHERE Xtype IN ('FN','TF')

或者

SELECT * from sysobjects WHERE [type] IN ('FN','TF')

将返回两者。

于 2012-11-30T14:42:13.797 回答
2

我认为sp_help做你想做的

sp_help 'dbo.InlineFunction'

Name            Owner   Type                Created_datetime
InlineFunction  dbo     inline function     2012-11-20 10:23:59.260

对...

sp_help 'dbo.ScalarFunction'

Name            Owner   Type                Created_datetime
ScalarFunction  dbo     scalar  function    2012-11-20 10:23:59.260
于 2012-11-30T14:36:46.323 回答
0

你试过加入吗sys.parameters

select * FROM sys.objects AS SO
INNER JOIN sys.parameters AS P 
ON SO.OBJECT_ID = P.OBJECT_ID where type = 'FN'

type_desc列应该是SQL_SCALAR_FUNCTION或者SQL_TABLE_VALUED_FUNCTION

于 2012-11-30T14:36:06.663 回答
0

除了sysobjectsandsys.Types您可以检查 UDF 并查看它是否仅返回 avalue或 a table

CREATE FUNCTION getCost(@person VARCHAR(10), @month TINYINT)
RETURNS INT 
AS
BEGIN
--function body here

在上述情况下,它只返回INT所以类型是FN

CREATE FUNCTION getCost(@person VARCHAR(10), @month TINYINT)
RETURNS TABLE
AS
BEGIN
--function body here

由于函数正在返回,table因此它的类型是TF(表值函数)

UDF 类型

于 2012-11-30T14:40:17.210 回答