【问题标题】:Query to List Table-Valued Functions and their Input Arguments?查询列出表值函数及其输入参数?
【发布时间】:2021-04-17 12:12:31
【问题描述】:

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

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,但没有找到解决方案。

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

【问题讨论】:

标签: sql-server table-valued-parameters


【解决方案1】:

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.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多