TSQL:如何判断UDF的类型?

时间:2012-11-30 14:27:53

标签: sql sql-server tsql

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

我检查了此查询的结果,但根据类型无法看到函数的任何差异:

select * from sysobjects where type = 'FN'

感谢。

4 个答案:

答案 0 :(得分:2)

我认为sp_help可以做你想要的事情

sp_help 'dbo.InlineFunction'

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

... VS

sp_help 'dbo.ScalarFunction'

Name            Owner   Type                Created_datetime
ScalarFunction  dbo     scalar  function    2012-11-20 10:23:59.260

答案 1 :(得分:2)

实际上你几乎就在那里:)

标量函数在FN中列为sysobjects类型,表函数列为TF类型。

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

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

将返回两者。

答案 2 :(得分: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_FUNCTIONSQL_TABLE_VALUED_FUNCTION

答案 3 :(得分:0)

除了sysobjectssys.Types之外,您还可以检查UDF,看看它是仅返回value还是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 Types