您现在的位置是:网站首页> 数据库

编写MSSQL调用的DLL

摘要

--开启clr功能

EXEC sp_configure 'show advanced options','1'; 

GO 

RECONFIGURE; 

GO 

EXEC sp_configure 'clr enabled','1' 

RECONFIGURE; 

GO 


--要改变的数据库

ALTER DATABASE [nodedb_003] SET TRUSTWORTHY ON 

GO 


--将dll文件添加到信任白名单

DECLARE @hash AS BINARY(64) = (SELECT HASHBYTES('SHA2_512', (SELECT * FROM OPENROWSET (BULK 'F:\2019LastCode\ASP.NET\MSSQLDll\MSSQLDll\bin\Release\MSSQLDll.dll', SINGLE_BLOB) AS [Data])))

EXEC sp_add_trusted_assembly @hash

go


--解决:在 master 数据库中记录的数据库所有者 SID 与在数据库 '**' 中记录的数据库所有者 SID 不同

sp_changedbowner 'sa',true


--创建程序集,【SQL_CLR_Decode】是创建的程序集名称,可以自定义

CREATE ASSEMBLY SQL_CLR_Decode

FROM 'F:\2019LastCode\ASP.NET\MSSQLDll\MSSQLDll\bin\Release\MSSQLDll.dll' 

WITH PERMISSION_SET = unSAFE 

GO


--创建函数

CREATE FUNCTION SqlDecode(@source_str NVARCHAR(4000)) 

RETURNS NVARCHAR(4000) 

AS 

--SQL_CLR_Decode是创建的程序集名称,DecodeCLR是程序集中命名空间的名称,CLRClass是类名,Decode是要调用的程序集中的方法名

EXTERNAL NAME SQL_CLR_Decode.[MSSQLDll.CLRClass].Decode 

GO




--调用函数

select dbo.SqlDecode('1Y3C1Y3Y')  




MSSQLDll源码 创建类库,版本.NET3.5


namespace MSSQLDll

{

    public class CLRClass

    {

        [Microsoft.SqlServer.Server.SqlMethod]

        public static string Decode(string source_str)

        {

            return "hello " + source_str;

        }

    }


Top