在SQL Server中修改程序集

3
我们有一个数据库,其中包含一些用C#编写的表值函数。我在Visual Studio中有一个数据库项目,在解决方案资源管理器中使用“部署”操作。然而,当我想要从我的开发数据库服务器更改测试数据库服务器上的程序集和函数时,我必须手动(现在是半自动化脚本)删除函数和程序集,然后创建程序集并创建函数。
在99%的情况下,我们不会更改接口(函数名称,列名称,列类型等)。
是否有一种简单的方法来更改程序集和相关的函数/过程? 谢谢
1个回答

3

简而言之,似乎没有其他方法。

删除并重新创建程序集和链接函数是数据库引擎验证接口是否有效(以及是否有效引用)的唯一方法。

编辑

有关程序集和引用函数之间关系的元数据存储在sys.assembly_modules表中:

SELECT *, OBJECT_NAME(OBJECT_ID) FROM sys.assembly_modules

从这些元数据生成下拉脚本非常容易:

DECLARE @assembly_name sysname
SET @assembly_name = '<your assembly name>'


SELECT 'drop function ' + OBJECT_NAME(OBJECT_ID)
FROM sys.assemblies AS a
JOIN sys.assembly_modules AS am
ON   am.assembly_id = a.assembly_id
WHERE a.name = @assembly_name

SELECT 'drop assembly ' + @assembly_name

生成创建脚本更加困难,因为无法知道界面是否发生了变化,或者要上传的程序集 dll 的位置。


我重新创建没有问题,除非必须手动重新创建。我正在寻找一些类似于“ALTER ASSEMBLY ...blah_blah_blah...”的方法,可以根据需要自动删除和重新创建相关对象。 - TcKs
@TcKs - 我不确定你的意思 - 你是在寻找一个脚本来删除和创建程序集吗? - Ed Harper
我不确定应该搜索什么。然而,能够找到所有依赖于程序集的对象、删除它们、删除程序集、创建新程序集并创建相关对象的脚本将非常好,并且足以满足我的需求。 - TcKs
@TcKs - 我在元数据中进行了一些探索;生成删除语句很容易(请参见编辑)。生成创建语句将需要更多的工作,特别是由于程序集 DLL 的文件系统位置未知。 - Ed Harper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接