我想编写一个过程来构建sql代码来定义给定程序集中的所有func / procs。 程序和标量函数很简单 - 迭代sys.assemblies / modules / objects / parameters我可以为create func / proc。
准备代码但我找不到存储tv函数返回的表定义的位置。像这样的函数的脚本是可能的,所以 - 表的定义必须写在somwhere ..
顺便说一下 - 第二个问题:是否有一些工具可以基于C#代码创建func / proc的sql定义?
答案 0 :(得分:0)
就像表,表值函数(内联,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
才能获得完整的数据类型名称。
但是,从那时起你就可以编写脚本了:
CREATE
语句,并且在任何一种情况下,这些对象都是从您应该已经拥有的T-SQL脚本创建的。除非,我想,你被交给了一个拥有这些对象的数据库,并且由于某种原因,部署脚本不可用。
是否有一些工具可以根据C#代码创建func / proc的T-SQL定义?
从数据库还是DLL / Assembly?有一些工具可用于从数据库中编写任何类型的对象的脚本。您还可以使用.NET SMO类来编写数据库中的定义脚本。如果要扫描DLL /程序集,则需要使用.NET Reflection类迭代每个方法,并查看SqlFunction
,SqlProcedure
,SqlFacet
属性/装饰器。