sqlserver 程序集

2023-02-17 00:00:00 函数 程序 调用 添加 存储过程

sqlserver程序集功能,可以调用C#编写的SQL CLR程序,实现更强的功能。

分三步走:VS编写程序,SQLSERVER中添加程序集、SQLSERVER中添加存储、函数调用程序集。

1、VS添加项目,以VS2019为例,添加项目时要选择“SQL SERVER数据库项目”


2、添加SQL CLR方法:根据需要添加存储过程、函数

初始的存储方法体如下

public partial class StoredProcedures


{


[Microsoft.SqlServer.Server.SqlProcedure]


public static void SpTest ()


    {


}


}








方法体上边的特性,表明了是存储过程还是函数。当是函数时,特性为SqlFunction,如果要对数据进行访问,需要指定DataAccess=read,如下

[SqlFunction(DataAccess = DataAccessKind.Read, DataAccessKind.Read)]



重要的类SqlContext:SQL上下文,可以通过Pipe向前端发送文字和数据,或者执行命令。

SqlConnection 连接字符串指定为“context connection=true”即可


[SqlProcedure]


public static void SpTest (SqlString billNo)


{


using (SqlConnection connection = new SqlConnection("context connection=true"))


{


connection.Open();






SqlCommand command = new SqlCommand(


$"SELECT top 100 * from AIS2019PXJT..T_PUR_POORDER WHERE FBILLNO like '%{billNo}%'", connection);


command.Parameters.AddWithValue("@BILL", billNo);


SqlContext.Pipe.ExecuteAndSend(command);


}


}














:如果有调用win32 api或者指针操作,需要设置程序集“权限级别”为 UNSAFE


3、在SQLSERVER中注册程序集:选择对应的DLL文件即可,同样如果有调用Win32 api,要指定权限集为“无限制

也可以用sql来注册程序集

create ASSEMBLY Test


FROM '*.dll'


WITH PERMISSION_SET = Unsafe;


GO





如果程序集是unsafe的,还需要先设置trustworthy=on,否则注册会报错

alter database [数据库名] set trustworthy on



4、编写存储过程


create proc SpBackUp(@BILL varcahr(100))


as


external NAME TEST.StoredProcedures.SpTest  //程序集的完全限定名


go




调用存储过程,需要打开CLR


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


go


reconfigure;


go


exec sp_configure 'clr enabled', '1'


go


reconfigure;


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


go









exec SpTest 'POORD01'

相关文章