sqlserver 程序集
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'
相关文章