Sql-Server的CLR,事务,SSB。Proc常见问题

本文详细介绍了Sql-Server的公共语言运行时(CLR)集成,包括其优势和启用方法,以及如何编写和执行CLR存储过程。在事务管理方面,探讨了事务的ACID属性、控制事务的语句以及分布式事务处理。此外,深入讨论了Service Broker(SSB)的概念,如会话、消息排序和协调,以及如何在应用程序中实现异步和事务性通信。最后,文章还涵盖了Proc的常见问题,如ANSI_NULLS、QUOTED_IDENTIFIER的设置及其影响。
摘要由CSDN通过智能技术生成

Sql-Server

公共语言运行时 CLR

CLR为托管代码提供服务,例如跨语言集成、代码访问安全性、对象生存期管理以及调试和分析支持。

集成优点

  • 更好的编程模型
  • 改进了安全和安全性
  • 能够定义数据类型和聚合函数
  • 通过标准化环境简化了开发
  • 具备改善性能和可扩展性的潜力。

启用CLR集成

若要启用 CLR 集成,请使用 sp_configure 存储过程的**“clr 已启用”**选项:

sp_configure 'show advanced options', 1;
GO
-- 显示或更改当前服务器的全局配置设置。0(成功)或 1(失败)
exec sp_configure
go
 -- 显示全部配置项
RECONFIGURE [WITH OVERRIDE];
GO
-- 指定如果配置设置不需要服务器停止并重新启动,则更新当前运行的值。
-- 禁用对 recoveryinterval 高级配置选项的配置值检查(以查找无效值或非建议值)
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
GRANT
-- 将安全对象的权限授予主体。

通过将**“clr 已启用”**选项设置为 0 可以禁用 CLR 集成。禁用 CLR 集成后,SQL Server 停止执行所有 CLR 例程并卸载所有应用程序域。

CLR版Hello World !

编写C#代码

using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;

public class HelloWorldProc
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void HelloWorld(out string text)
    {
        SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
        text = "Hello world!";
    }
}

编译Hello World 存储过程

-- 找到.NET Framework的默认安装路径
C:\Windows\Microsoft.NET\Framework\(version)
-- 对于c# 源文件执行以下命令
csc /target:library helloworld.cs
-- 使用 /target 选项启动 Visual C# 编译器,以指定生成库 DLL。
-- SQL Server默认未开启CLR集成,
sp_configure 
-- 建立查询语句
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
-- 创建存储过程
CREATE PROCEDURE hello
@i nchar(25) OUTPUT
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
			-- 程序集名.类名.方法名
-- 调用存储过程
DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J
-- 消息窗口输出结果
Hello world!
Hello world!
-- 删除存储过程
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
   drop procedure hello
-- 删除程序集
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')
   drop assembly helloworld

事务

  • A 原子性 事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

  • C 一致性 事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。

  • I 隔离性 由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。

  • D 持久性 事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

    开启事务:conn.setAutoCommit(false); jdbc关闭自动提交事务
    提交事务:conn.commit();
    回滚事务: conn.rollback();
    
指定和强制事务

SQL 程序员要负责启动和结束事务,同时强制保持数据的逻辑一致性。

数据库引擎提供

  • 锁定设备,使事务保持隔离。
  • 记录设备,保证事务的持久性。即使服务器硬件、操作系统或数据库引擎实例自身出现故障,该实例也可以在重新启动时使用事务日志,将所有未完成的事务自动地回滚到系统出现故障的点。
  • 事务管理特性,强制保持事务的原子性和一致性。事务启动之后,就必须成功完成,否则数据库引擎实例将撤消该事务启动之后对数据所做的所有修改。
控制事务

启动事务

  • 启动事务 (事务模式按连接级别进行管理。一个连接的事务模式发生变化对任何其他连接的事务模式没有影响.)

    • BEGIN TRANSACTION 开启事务
      标记显式连接事务的起始点。
    • COMMIT TRANSACTION 或 COMMIT WORK 提交事务
      如果没有遇到错误&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值