我的SQL CLR过程依赖于log4net,它依赖于System.Web.dll。
当我上传此 System.Web.dll 时:
create assembly [System.Web]
from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
with permission_set = unsafe;
go
我看到还添加了 20 个其他程序集。 好的。 我如何编写这个/这些程序集的脚本并从脚本中的二进制文件上传它们?
如果您已经将这些程序集加载到 SQL Server 中,那么您有两个选择。首先,如果您使用 SSMS,您也许能够编写程序集脚本。只是:
脚本化的对象可能按依赖顺序排列,在这种情况下,
CREATE ASSEMBLY
语句不需要重新排序。
如果出现错误,如果您想要实际详细信息,可能需要保存报告。可能是:
SmoException:发现循环依赖项。
这是我在编写已加载的一些 .NET Framework 库的脚本时遇到的情况。苏....
第二个选项是通过从系统目录视图中选择内容来简单地构造
CREATE ASSEMBLY
语句:
SELECT N'CREATE ASSEMBLY ' + QUOTENAME(asm.[name]) + NCHAR(0x0A)
+ N' FROM ' + CONVERT(NVARCHAR(MAX), [content], 1) + NCHAR(0x0A)
+ N' WITH PERMISSION_SET = '
+ CASE asm.[permission_set]
WHEN 3 THEN N'UNSAFE'
ELSE asm.[permission_set_desc] COLLATE DATABASE_DEFAULT
END
FROM sys.assemblies asm
INNER JOIN sys.assembly_files asf
ON asf.[assembly_id] = asm.[assembly_id]
WHERE asf.[file_id] = 1
AND asm.is_user_defined = 1
--AND asm.[name] = N'{{assembly_name}}'
FOR XML AUTO, ELEMENTS;
警告: 不要左键单击返回的 XML 值,该值应显示为链接,如果您左键单击它,将打开一个新选项卡,其中包含格式化的 XML 文档。返回的值很可能对于 SSMS 来说太大而无法处理(它肯定是在我使用 SSMS 18.10 的系统上),并且它将永远挂起,您将需要强行终止该进程(我只是在尝试一个 4 的程序集) MB)。您可能有多个程序集作为依赖项加载,并且这些大小可能会快速增加。
您需要通过右键单击“结果”选项卡中的任意位置并选择“结果另存为...”来保存结果。我不确定“保存类型”是否重要,因为它们都是文本并且只有一个值,但我通常选择“所有文件(*.*)”。
如果文件太大而无法在文本编辑器或 SSMS 中打开,您可以取消注释WHERE
上的
[name]
谓词过滤并一次执行一个,或者将其设为
IN
列表并一次执行多个.另请记住:
<asm>
和
</asm>
标签。
CREATE ASSEMBLY
语句的顺序。