当前位置: 首页 > news >正文

SQL SERVER 的 CLR 存储过程

SQL SERVER 的 CLR 存储过程

MS SQL的TransactSQL语法比较单一,用起来也很不习惯,如果想实现一些复杂一点的逻辑,不方便。
可以利用NET编码,编译成DLL,然后在SQL SERVER里引用。
一、 编码
1、 新建一个项目,数据库类型 --》SQL SERVER


2、 新建“存储过程”


3、 编码也没有什么特别,主要是有些数据类型有讲究。比如参数,应该能被SQL SERVER认识或方便调用传送,象整数就用SqlInt32什么的。但函数内部,就似乎没什么讲究。
[Microsoft.SqlServer.Server.SqlProcedure]
public static void UserInit(SqlInt32 iUserId)
{
int i = 0;
}

4、 数据库连接。由于这些函数和方法最终都在SQL SERVER里调用,那么调用它们之前,肯定已经和数据库连接上了,所以应该使用当前的数据库连接。
[Microsoft.SqlServer.Server.SqlProcedure]
public static void UserInit(SqlInt32 iUserId)
{
int i = 0;
using (SqlConnection connection = new SqlConnection("context connection = true"))
{……}
}

二、 添加部署
1、 代码编写完后,编译成DLL。然后打开SQL SERVER的目标数据库 --》程序集 --》添加程序集,将DLL导入。给该程序集起个名字,比如叫myClrDll


2、 在目标数据库新建一个存储过程,使用程序集里的函数。
CREATE PROCEDURE [dbo].[clr_User_Init]
@UserId [int]
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [myClrDll].[StoredProcedures].[UserInit]
GO

三、 更新
如果代码更改,重新编译成DLL,可以用以下语句重新导入
ALTER ASSEMBLY [myClrDll]
FROM 'd:\code\temp\myClrDll.dll'
注意'd:\code\temp\myClrDll.dll'一定是数据库所在机器的路径。通常我们程序和数据库不同机器,所以这个路径常常搞错。

四、注意

CLR中的SqlString,在T-sql里面,要写成:NVarChar(MAX)。


相关文章:

  • 有用的Oracle 管理工具 for windows助手
  • 现代软件构建系统的使用 CMake简介
  • 搜集的一些RTMP项目,有Server端也有Client端
  • .NET的数据绑定
  • 从员工、猎头到创业者的职场经验——《程序员羊皮卷》书
  • 完成从学习者到社会人的转变——《程序员羊皮卷》连载(14)
  • 百度全面放弃竞价排名的原因
  • Mobile Market如何能像淘宝网一样流行?
  • Ubuntu 9.10总算出来了
  • 《程序员羊皮卷》还未上市即告售罄的故事
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • 翻阅笔记所得杂记若干
  • Windows Embedded 6.0 R3开发初体验
  • 《程序员羊皮卷》荣升当当IT图书飙升榜第一名
  • 规划大学生活,成就梦想明天--《程序员羊皮卷》高校公益巡讲介绍
  • 《深入 React 技术栈》
  • 【个人向】《HTTP图解》阅后小结
  • 30秒的PHP代码片段(1)数组 - Array
  • Bytom交易说明(账户管理模式)
  • fetch 从初识到应用
  • Git初体验
  • Git的一些常用操作
  • go语言学习初探(一)
  • Java编程基础24——递归练习
  • Linux gpio口使用方法
  • npx命令介绍
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Protobuf3语言指南
  • scala基础语法(二)
  • Yii源码解读-服务定位器(Service Locator)
  • 测试开发系类之接口自动化测试
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 关于使用markdown的方法(引自CSDN教程)
  • 模型微调
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 在Unity中实现一个简单的消息管理器
  • 整理一些计算机基础知识!
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #1015 : KMP算法
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (04)odoo视图操作
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (c语言)strcpy函数用法
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (笔试题)合法字符串
  • (补)B+树一些思想
  • (二)Linux——Linux常用指令
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m