我在 SQL Server 中注册了一个程序集:
CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A90000300000...
WITH PERMISSION_SET = SAFE
我怎样才能找到这个程序集的路径?
我在 SQL Server 中注册了一个程序集:
CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A90000300000...
WITH PERMISSION_SET = SAFE
我怎样才能找到这个程序集的路径?
它不是 SQL Server 中的程序集引用,程序集实际上是加载到数据库中的。因此,没有典型的“路径”。
如果您正在寻找 SQLPS (PowerShell) 路径,那么它将是:
SQLSERVER:\SQL\YourServerName\YourInstanceName\Databases\YourDatabaseName\Assemblies\
已弃用的(自引入 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 信息