msg:6528,数据库'XYZ'的SQL目录中找不到程序集'XYZCLRDatabase'

问题描述 投票:0回答:1

我对数据库执行了以下命令,它给我消息命令成功完成。

USE XYZ
GO
DECLARE @clrName nvarchar(4000) = 'XYZCLRDatabase, ...';
DECLARE @asmBin varbinary(max) = <bindary>;
DECLARE @hash varbinary(64);

SELECT @hash = HASHBYTES('SHA2_512', @asmBin);

EXEC sys.sp_add_trusted_assembly @hash = @hash,
                                @description = @clrName;
GO

它还在sys.trusted_assemblies表中显示相同的记录。

但是它没有列在Assemblies文件夹中...

XYZ数据库>可编程性>程序集

[当我尝试使用以下代码创建存储过程时,出现错误。

USE XYZ
GO
CREATE PROCEDURE SPName @sqlXml XML, @flag1 bit, @flag2 bit, @id int null, @flag3 bit
AS
EXTERNAL NAME XYZCLRDatabase.StoredProcedures.MYClrSP

我收到以下错误消息:

Msg 6528, Level 16, State 1, Procedure SPName, Line 1 [Batch Start Line 23]
Assembly 'XYZCLRDatabase' could not be found in the SQL catalog for database 'XYZ'.

出了什么问题。...

c# sql-server sql-server-2017 sqlclr
1个回答
0
投票

您缺少CREATE ASSEMBLY指令。总之,在SQL Server中添加程序集的步骤是:

  1. 确保SQL Server实例允许CLR:EXEC sp_configure 'clr enabled', 1;
  2. 确保数据库被标记为受信任:ALTER DATABASE databaseName SET TRUSTWORTHY ON

这些步骤仅需要执行一次(数据库还原后也将需要执行步骤2)

  1. 调用sp_add_trusted_assembly存储过程
  2. 调用CREATE ASSEMBLY指令
© www.soinside.com 2019 - 2024. All rights reserved.