查询以列出 Table 值函数及其输入参数?

Query to List Table-Valued Functions and their Input Arguments?

以下查询将 return 数据库中所有 table 值函数的列表及其输出列(和列数据类型)的列表。

USE DATABASENAME
GO

SELECT
rc.*
FROM
INFORMATION_SCHEMA.ROUTINES r INNER JOIN
INFORMATION_SCHEMA.ROUTINE_COLUMNS rc ON
r.ROUTINE_CATALOG = rc.TABLE_CATALOG AND
r.ROUTINE_SCHEMA = rc.TABLE_SCHEMA AND
r.ROUTINE_NAME = rc.TABLE_NAME
WHERE
r.ROUTINE_TYPE = 'FUNCTION' AND
r.DATA_TYPE = 'TABLE'

但是有没有一种方法可以查询数据库中所有 table 值函数的列表以及它们的输入参数(和参数数据类型)的列表?

我看了 here 但没有找到解决方案。

我注意到 INFORMATION_SCHEMA.ROUTINES table 中有一个名为 ROUTINE_DEFINITION 的列,它显示了创建 table 值函数的完整脚本,所以我想可以解析此字符串并找到您要查找的输入数据类型,尽管这会非常复杂,尤其是考虑到此 ROUTINE_DEFINITION 中包含编程注释,这只会使事情变得更加复杂。

应避免使用

INFORMATION_SCHEMA 系统表,因为它们是非特定于 SQL 服务器客户端的通用视图。而是使用 sys 架构的表和视图。

不幸的是没有sys.functions所以我们必须过滤sys.objects

select o.name, p.*, t.name as type_name
from sys.parameters p
join sys.types t on t.user_type_id = p.system_type_id
join sys.objects o on o.object_id = p.object_id
where o.[type] in ('IF', 'TF') -- IF is inline, TF is multi-statement