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 提交事务
如果没有遇到错误&
- BEGIN TRANSACTION 开启事务