使用TSQL是否有办法确定UDF是返回标量值还是表值?
我检查了此查询的结果,但根据类型无法看到函数的任何差异:
select * from sysobjects where type = 'FN'
感谢。
答案 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_FUNCTION
或SQL_TABLE_VALUED_FUNCTION
答案 3 :(得分:0)
除了sysobjects
和sys.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
(表值函数)