SQL Server 用于确定标量函数返回类型的SQL查询

mnemlml8  于 2023-01-08  发布在  其他
关注(0)|答案(3)|浏览(99)

我知道我可以查询函数的参数数据类型,如下所示:

SELECT st.name
FROM sys.objects o
    JOIN sys.all_parameters ap ON ap.object_id = o.object_id
    JOIN sys.systypes st ON st.type = ap.system_type_id
WHERE o.object_id = OBJECT_ID(N'[dbo].[fn_GetPercent]') AND o.type = N'FN'

如何通过编程检查这个函数的返回类型?我可以连接到另一个sys表来获取这些信息吗?
我使用的是SQL Server 2012,但我希望它也能向后兼容2008。

ppcbkaq5

ppcbkaq51#

使用INFORMATION_SCHEMA.ROUTINES系统视图查找User Defined Functionreturn type

SELECT ROUTINE_NAME,
       DATA_TYPE
FROM   INFORMATION_SCHEMA.ROUTINES
WHERE  ROUTINE_TYPE = 'FUNCTION'
cfh9epnr

cfh9epnr2#

我在INFORMATION_SCHEMA.ROUTINES中找不到f_dblog函数,但它的工作就像一个魔咒:
https://database.guide/find-out-the-data-type-of-the-columns-returned-in-a-result-set-in-sql-server/

SELECT 
    name,
    user_type_name,
    system_type_name,
    max_length,
    [precision],
    scale
FROM sys.dm_exec_describe_first_result_set(

    'SELECT TOP 1
 [Current LSN],
 [Transaction ID],
 [Operation],
  [Transaction Name],
 [CONTEXT],
 [AllocUnitName],
 [Page ID],
 [Slot ID],
 [Begin Time],
 [End Time],
 [Number of Locks],
 [Lock Information]
FROM sys.fn_dblog(NULL,NULL)', 
    null, 
    0);
zbdgwd5y

zbdgwd5y3#

您可以使用相同的系统视图sys.all_parameters。在标量函数中,它为返回类型. See MSDN for sys.all_parameters提供一个空名称的行

SELECT o.name AS ObjectName, st.name AS TypeName
FROM sys.objects o
INNER JOIN sys.all_parameters ap ON ap.object_id = o.object_id
INNER JOIN sys.types st on st.system_type_id = ap.system_type_id
WHERE ap.name = '' -- Only returned values

相关问题