|
|
|
|
-- =============================================
|
|
|
|
|
-- 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;
|