以下查询将返回数据库中所有表值函数的列表及其输出列(和列数据类型)的列表。
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'
但是有没有办法查询数据库中所有表值函数的列表及其输入参数(和参数数据类型)的列表?
我查看了here但没有找到解决方案。
我注意到
ROUTINE_DEFINITION
表中有一个名为 INFORMATION_SCHEMA.ROUTINES
的列,它显示了创建表值函数的完整脚本,因此我认为可以解析该字符串并找到您需要的输入数据类型正在寻找,尽管这会非常复杂,特别是考虑到编程注释包含在此ROUTINE_DEFINITION
中,这只会让事情变得更加复杂。
INFORMATION_SCHEMA
系统表,因为它们是非特定于 SQL Server 客户端的通用视图。请改用 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.user_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