【问题标题】:How to retrieve full definition of external func/proc?如何检索外部​​ func/proc 的完整定义?
【发布时间】:2017-11-23 03:58:57
【问题描述】:

我想编写一个程序来构建 sql 代码以定义给定程序集中的所有 func/procs。 过程和标量函数很简单 - 迭代 sys.assemblies/modules/objects/parameters 我可以为创建 func/proc 准备代码。

但是我找不到 tv 函数返回的表的定义存储在哪里。这样的函数脚本是可能的,所以 - 表的定义必须写在某个地方..

顺便问一下——第二个问题:有没有一些工具可以基于 C# 代码创建 func/proc 的 sql 定义?

【问题讨论】:

    标签: sql-server tsql scripting sqlclr


    【解决方案1】:

    就像表一样,表值函数(内联、SQL 多语句和 SQLCLR)和视图都在 sys.columns 系统目录视图(和 sys.all_columns)中维护。

    SELECT obj.[name], obj.[type_desc], col.[name]
    FROM   sys.objects obj
    INNER JOIN sys.columns col
            ON col.[object_id] = obj.[object_id]
    ORDER BY obj.[type_desc], obj.[name], col.[name];
    

    您需要加入sys.types 以获取完整的数据类型名称。

    但是,在你正在做的事情中编写脚本没有什么意义,因为:

    1. 如果 T-SQL 包装器对象(用于程序集中的 SQLCLR 方法)是由您编写的脚本创建的,那么您已经拥有这些 CREATE 语句,并且
    2. 如果 T-SQL 包装对象是由 SSDT 创建的(使用或不使用 Visual Studio),那么您已经拥有“创建”脚本(如果您选择在每次构建时生成它)和增量“发布”脚本。

    在任何一种情况下,这些对象都是从您应该已经拥有的 T-SQL 脚本创建的。除非,我想,你得到了一个包含对象的数据库,并且部署脚本由于某种原因不可用。

    是否有一些工具可以基于 C# 代码创建 func/proc 的 T-SQL 定义?

    来自数据库还是 DLL/程序集?有一些工具可用于从数据库中编写任何类型的对象的脚本。您还可以使用 .NET SMO 类从数据库中编写定义脚本。如果要扫描 DLL / 程序集,则需要使用 .NET 反射类来遍历每个方法并查看 SqlFunctionSqlProcedureSqlFacet 属性/装饰器。

    【讨论】:

    • > 部署脚本由于某种原因不可用。
    • Simple - thx :-) 第二个问题是指源代码(C#)或 DLL。
    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多