4

我在 SQL Server 中注册了一个程序集:

CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM  0x4D5A90000300000...
WITH PERMISSION_SET = SAFE

我怎样才能找到这个程序集的路径?

4

2 回答 2

5

它不是 SQL Server 中的程序集引用,程序集实际上是加载到数据库中的。因此,没有典型的“路径”。

如果您正在寻找 SQLPS (PowerShell) 路径,那么它将是:

SQLSERVER:\SQL\YourServerName\YourInstanceName\Databases\YourDatabaseName\Assemblies\
于 2012-06-19T14:10:56.870 回答
2

已弃用的(自引入 SQLCLR 的 SQL Server 2005 版本起)扩展存储过程 API / 功能(即 XP)确实指向外部 DLL。这意味着它们可能会被删除并且不会包含在数据库的备份中。使用 SQLCLR,程序集被导入数据库并可以通过sys.assembly_files. 将程序集包含在数据库中可确保它们包含在所有数据库备份中(在您不知情的情况下不会神奇地消失或被替换等其他好处)。

执行以下操作以查看您已加载哪些程序集、它们的原始路径(仅当它们是从外部 DLL 加载而不是从VARBINARY文字/十六进制字节加载时)及其完整内容/字节:

SELECT asm.[name] AS [Assembly], afl.[name] AS [PathOrAltName], afl.[content]
FROM   sys.assembly_files afl
INNER JOIN sys.assemblies asm
        ON asm.[assembly_id] = afl.[assembly_id]
ORDER BY asm.[name];

如果程序集是从VARBINARY文字/十六进制字节(即0x4D5A9000...)加载的,则[name]in 列sys.assembly_files应与in[name]列相同sys.assemblies(这是CREATE ASSEMBLY语句中使用的名称)。

有关一般使用 SQLCLR 的更多信息,请访问:SQLCLR 信息

于 2020-09-23T14:54:25.150 回答