You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.5 KiB
Transact-SQL

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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