参考:微软官网 https://msdn.microsoft.com/zh-cn/library/ms345106(es-es).aspx
1、新建项目 SQLDllTestUsingNew
Class1类代码:
using System.Web; namespace SQLDllTestUsingNew { public class Class1 { public static string GetStr(string par1) { return par1 + "水印New"; } } }
2、类库项目进行签名,签名后编译【项目】:
3、启用CLR功能:默认情况下,Sql Server中的CLR是关闭的,
exec sp_configure 'clr enabled',1 reconfigure go
4、
注册DLL:
为了调用我们写的那个方法,需要在SQL Server中注册我们刚刚编译好的那个DLL。在此之前,要知道在这个项目中如果要访问服务器之外的资源是要配置权限的。如果不配置,后面操作中会出现类似下面的错误。我找到的关于授权配置的内容:连接。
创建登录名和密钥,如果程序集有变更,要删除密钥和登录名重新创建:
USE master; --此处必须是 master库 GO CREATE ASYMMETRIC KEY SQLCLRSyncKey FROM EXECUTABLE FILE = 'D:SQLDllTestUsingNew.dll' CREATE LOGIN SQLCLRSyncLogin FROM ASYMMETRIC KEY SQLCLRSyncKey GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRSyncLogin;
GRANT UNSAFE ASSEMBLY TO SQLCLRSyncLogin
创建程序集,DLL变更后要删除重新创建代码如下:
DROP LOGIN SQLCLRSyncLogin DROP ASYMMETRIC KEY SQLCLRSyncKey
5、创建程序集,DLL变更后要删除重新创建:
use TestDB go create ASSEMBLY MySync FROM 'D:SQLDllTestUsingNew.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS;
如果提示错误:Msg 6522, Level 16, State 1, procedure InsertingRows,Line 0
A .NET Framework error occurred during execution of user defined routine or aggregate 'InsertingRows':
System.Security.SecurityException
改成:create ASSEMBLY MySync
FROM 'D:SQLDllTestUsingNew.dll'
WITH PERMISSION_SET = UNSAFE;
6、创建一个函数用于调用这个DLL
CREATE FUNCTION dbo.fun_sync ( @strSql nvarchar(max) ) RETURNS nvarchar(max) AS EXTERNAL NAME [MySync].[SQLDllTestUsingNew.Class1].[GetStr]
7、调用创建的函数。
select dbo.fun_sync('dsdfg')
结果: dsdfg水印New