使用 TSQL 有没有办法确定 UDF 是返回标量值还是表值?
我检查了此查询的结果,但看不到基于类型的函数有任何差异:
select * from sysobjects where type = 'FN'
谢谢。
使用 TSQL 有没有办法确定 UDF 是返回标量值还是表值?
我检查了此查询的结果,但看不到基于类型的函数有任何差异:
select * from sysobjects where type = 'FN'
谢谢。
实际上你快到了:)
标量函数被列为FN
in类型sysobjects
,表函数被列为 type TF
。
SELECT * from sysobjects WHERE Xtype IN ('FN','TF')
或者
SELECT * from sysobjects WHERE [type] IN ('FN','TF')
将返回两者。
我认为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
你试过加入吗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
除了sysobjects
andsys.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
(表值函数)