查询以列出 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
以下查询将 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