-- ============================================= -- Author: wanggf719 -- Create date: 2022.08.23 -- Description: SQL Server 启用 CLR 功能 -- Rev: 1.00 -- ============================================= -- 启用CLR功能 GO -- 启用CLR功能开关 EXEC sp_configure 'clr enabled', 1; -- 立即生效: GO RECONFIGURE; -- 出现“不支持对系统目录进行即席更新 ”的错误时,改用下面语句 -- GO -- RECONFIGURE with override -- 设置权限: -- 方式1:关闭"严格安全"选项 -- 启用高级选项,否则"clr strict security"选项无效 EXEC sys.sp_configure @configname = 'show advanced options', @configvalue = 1; GO -- 生效 RECONFIGURE; GO -- 关闭"严格安全"选项 EXEC sys.sp_configure @configname = 'clr strict security', @configvalue = 0; RECONFIGURE; -- 方式2:程序集带签名 -- 方式3:程序集加入白名单 GO -- 定义程序集Hash值变量 DECLARE @hash AS BINARY(64); -- 获取程序集文件的hash值 SELECT @hash = HASHBYTES('SHA2_512', (SELECT * FROM OPENROWSET (BULK 'D:\Database\SQL Server\ClrDemo\ClrDll\ClrDemoNet35.dll', SINGLE_BLOB) AS [Data])); -- 加入程序集白名单 EXEC sp_add_trusted_assembly @hash; -- 加载程序集 -- 加载程序集 -- 加载方式1:使用程序集文件 CREATE ASSEMBLY ClrDemoNet35 FROM 'D:\Database\SQL Server\ClrDemo\ClrDll\ClrDemoNet35.dll'; -- 或者 CREATE ASSEMBLY ClrDemoNet35 FROM 'D:\Database\SQL Server\ClrDemo\ClrDll\ClrDemoNet35.dll' WITH PERMISSION_SET = UNSAFE; -- 加载方式2:使用文件16进制流 CREATE ASSEMBLY AssemblyName from 0x123344 -- 其中0x12334……是程序集dll文件的十六进制流。可以使用UltraEdit等编辑器把相关dll文件的十六进制流copy出来。 -- 加载方式3:SSMS图形化设置:数据库 --> 可编程性 --> 程序集 --> 右键 --> 新建程序集 -- 修改程序集 GO ALTER ASSEMBLY ClrDemoNet35 FROM 'D:\Database\SQL Server\ClrDemo\ClrDll\ClrDemoNet35.dll' WITH PERMISSION_SET = UNSAFE; -- 删除程序集 DROP ASSEMBLY AssemblyName -- 在存储过程中使用 GO -- 创建存储过程,调用Dll方法 CREATE PROCEDURE Pro_ClrDemoNet35_UseClr AS -- 存储过程主题:好像只能有这一条直接调用语句,加入其它语句直接报语法错误 EXTERNAL NAME [ClrDemoNet35].[ClrDemoNet35.ClrDemo].[UseClr]; GO -- 使用存储过程(内部调用C#方法) -- 输出字符串:Hello,SQL Server CLR! EXEC dbo.Pro_ClrDemoNet35_UseClr;