sql server存储过程是利用其提供的Transact-SQL语言所编写的程序。
它所遵循的几个原则:
1)、变量说明
2)、ANSI兼容的SQL命令(Select,Update….)
3)、一般流程控制命令(if…else…、while….)
4)、内部函数
它所需要注意的几个常用设置:
a). SET ANSI_NULLS {ON | OFF}
b). SET QUOTED_IDENTIFIER ON
这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则。SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
如果涉及到事务,事实上,在实际开发中这是不可避免的,我们应该备加小心:
c). BEGIN TRANSACTION 开始事务
d). COMMIT TRANSACTION 提交事务
e). ROLLBACK TRANSACTION 回滚事务
f). SET IMPLICIT_RANSACTION ON 隐式事务
脏读 (dirty read):一个事务读取了另一个事务尚未提交的更新,就叫做脏读。
不可重复读(nonrepeatable read):如果事务二能够看到事务一所提交的数据更新,就意味着出了不可重复读型事务缺陷。
幻影行(phantom rows):当一个事务的select语句返回的结果受到另一个事务的影响而发生改变的现象叫做幻影行。
执行事务的步骤
1.数据库开始状态
2.数据更新命令
3.记录事务日志
4.事务提交
5.更新数据文件
6.事务结束
它所遵循的几个原则:
1)、变量说明
2)、ANSI兼容的SQL命令(Select,Update….)
3)、一般流程控制命令(if…else…、while….)
4)、内部函数
它所需要注意的几个常用设置:
a). SET ANSI_NULLS {ON | OFF}
b). SET QUOTED_IDENTIFIER ON
这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则。SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
如果涉及到事务,事实上,在实际开发中这是不可避免的,我们应该备加小心:
c). BEGIN TRANSACTION 开始事务
d). COMMIT TRANSACTION 提交事务
e). ROLLBACK TRANSACTION 回滚事务
f). SET IMPLICIT_RANSACTION ON 隐式事务
脏读 (dirty read):一个事务读取了另一个事务尚未提交的更新,就叫做脏读。
不可重复读(nonrepeatable read):如果事务二能够看到事务一所提交的数据更新,就意味着出了不可重复读型事务缺陷。
幻影行(phantom rows):当一个事务的select语句返回的结果受到另一个事务的影响而发生改变的现象叫做幻影行。
执行事务的步骤
1.数据库开始状态
2.数据更新命令
3.记录事务日志
4.事务提交
5.更新数据文件
6.事务结束