数据库存储过程相关知识

(一)

SET ANSI_NULLS {ON | OFF}

指定在对空值使用等于 (=) 和不等于
(<>) 比较运算符时,这些运算符的 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 标准。使用 WHEREcolumn_name = NULL 的 SELECT
语句返回 column_name 中含有空值的行。使用
WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用
WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。

说明  Microsoft? SQL Server?
是将空字符串解释为单个空格还是真正的空字符串,取决于 sp_dbcmptlevel 的兼容级别设置。如果兼容级别小于或等于
65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server
将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel

当 SET ANSI_NULLS 为 ON 时,所有对空值的比较均取值为 UNKNOWN。当
SET ANSI_NULLS 为 OFF 时,如果数据值是 NULL,则所有数据对空值的比较将取值为
TRUE。如果未指定,则应用当前数据库的 ANSI
nulls 
选项的设置。有关 ANSI
nulls 
数据库选项的更多信息,请参见 sp_dboption 和设置数据库选项

为使脚本按预期运行,不管 ANSI
nulls 
数据库选项或 SET ANSI_NULLS 的设置是什么,在可能包含空值的比较中使用 IS NULL 和 IS NOT
NULL。

对于存储过程,SQL Server 使用最初创建存储过程时的 SET ANSI_NULLS
设置值。无论随后何时执行存储过程,SET ANSI_NULLS 的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用 SET ANSI_NULLS
时,其设置不更改。

在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。

在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。如果
SET ANSI_NULLS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL
Server 将返回一个错误,列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL
Server 将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样。

说明  ANSI_NULLS
是在处理计算列或索引视图上的索引时必须设置为所需值的七个 SET 选项之一。还必须将选项
ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、QUOTED_IDENTIFIER 和
CONCAT_NULL_YIELDS_NULL 设置为 ON,而必须将 NUMERIC_ROUNDABORT 设置为 OFF。

SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft
OLE DB 提供程序在连接时自动将 ANSI_NULLS 设置为 ON。该设置可以在 ODBC 数据源、ODBC 连接特性或 OLE DB
连接属性(它们在连接到 SQL Server 之前在应用程序中设置)中进行配置。对来自 DB-Library 应用程序的连接,SET ANSI_NULLS
默认为 OFF。

当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET
ANSI_NULLS。

SET ANSI_NULLS
的设置是在执行或运行时设置,而不是在分析时设置。

权限

SET
ANSI_NULLS 权限默认授予所有用户。

示例

下例使用等于 (=) 和不等于 (<>) 比较运算符对表中的 NULL
值和非空值进行比较。下例还显示 IS NULL 不受 SET ANSI_NULLS 设置的影响。

-- Create table t1 and insert values.
CREATE TABLE t1 (a int null)
INSERT INTO t1 values (NULL)
INSERT INTO t1 values (0)
INSERT INTO t1 values (1)
GO
-- Print message and perform SELECT statements.
PRINT ‘Testing default setting‘
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname
SELECT *
FROM t1
WHERE a <> @varname
SELECT *
FROM t1
WHERE a IS NULL
GO
-- SET ANSI_NULLS to ON and test.
PRINT ‘Testing ANSI_NULLS ON‘
SET ANSI_NULLS ON
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname
SELECT *
FROM t1
WHERE a <> @varname
SELECT *
FROM t1
WHERE a IS NULL
GO
-- SET ANSI_NULLS to OFF and test.
PRINT ‘Testing SET ANSI_NULLS OFF‘
SET ANSI_NULLS OFF
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname
SELECT *
FROM t1
WHERE a <> @varname
SELECT *
FROM t1
WHERE a IS NULL
GO
-- Drop table t1.
DROP TABLE t1
GO

请参见

=(等于)

IF...ELSE

<>(不等于)

SET

SET
ANSI_DEFAULTS

WHERE

WHILE

(二)

SET QUOTED_IDENTIFIER off

主要是针对 双引号可能带来的错误(建立存储过程的时候)。

用上了OFF使 一些数据库的“”双引号不会出错。

用完记得 ON 。因为系统默认是 ON的。

数据库存储过程相关知识,布布扣,bubuko.com

时间: 2024-08-05 14:18:59

数据库存储过程相关知识的相关文章

数据库原理相关知识

数据库原理相关知识 made by @杨领well([email protected]) 一.基础知识 1. 简述数据库系统的特点. 数据结构化 : 这是数据库系统与文件系统的本质区别. 数据的共享性高.冗余度低且易扩充 : 数据共享可以大大减少数据冗余, 节约存储空间.数据共享还能够避免数据之间的不相容性和不一致性. 数据的独立性高 : 数据独立性包括物理独立性和逻辑独立性. 数据由数据库管理系统统一管理和控制 : 数据的安全性保护(保护数据以防止不合法使用造成的数据泄密和破坏).数据的完整性

数据库MySQL相关知识

数据库的三种常见类型: 1.文件数据库 AQLite 2.关系型数据库 Oracle MySQL SQLServer 3.NoSQL数据库 Redis HBase MongoDB 在用SQLyog操作MySQL数据库时,一定不要修改information_schema  mysql  performance_schema这三个数据库,否则会导致程序崩溃 三种常见的数据类型:int varchar(字符串类型) date 列的属性:length  主键(Primary Key)  自增 lengt

基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用

在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各个方面来总结并记录一下这个新型.看似神秘的数据库使用过程.本文是这个系列的开篇,主要介绍一些MongoDB数据库的基础知识.安装过程.基础使用等方面. MongoDB是一款由C++编写的高性能.开源.无模式的常用非关系型数据库产品,是非关系数据库当中功能最丰富.最像关系数据库的数据库.它扩展了关系型

程序员面试笔试宝典学习记录(三)(数据库相关知识)

关系数据库系统与文件数据库系统的区别如下: (a)关系数据库系统的主要特征是数据的结构化,而文件数据库系统是数据的非结构化. (b)关系数据库系统中,用户看到的逻辑结构是二维表,而文件数据库系统中,基本元素是文件. (c)文件数据库系统可以实现多媒体文件管理,支持C/S工作模式. acid,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability). 数据查询:select sele

让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议

第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在很多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表.这个debug表中的字段要包括原表的所有字段,同时要增加操作时间.操作码和操作描述等字段信息. 例如,在某项目中,包括了如下一个重要的表tb_XXX: create table tb_XXX (      AAA           

[python] 专题九.Mysql数据库编程基础知识

在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Python构建网页的,所以这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 首先下载mysql-5.0.96-winx64,安装

BI 主要环节 ETL 相关知识

BI架构-BI 主要环节 ETL 相关知识 主要功能  :将源系统的数据加载到数据仓库 及数据集市层中: 主要问题体现:  复杂的源数据环境,包括繁多的数据种类.巨大的加载数据量.错综复杂的数据关系和参差不齐的数据质量 常见术语  ETL:数据抽取.转换.加载(Extract/Transform/Load)  EXF:抽取的文件(Extract File)  CIF:共用接口文件(Common Interface File)  PLF:预加载文件(Preload File)  LDF:

asp.net core系列 30 EF管理数据库架构--必备知识 迁移

原文:asp.net core系列 30 EF管理数据库架构--必备知识 迁移 一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为准,请使用迁移. 对 EF Core 模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与 EF Core 模型兼容.  (2)如果希望以数据库架构为准,请使用反向工程. 使用此方法,可通过将数

索引相关知识

索引 为什么使用索引 ? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. ? 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数.相似的例子还有:查字典,查火车车次,飞机航班等,下面内容看不懂的同学也没关系,能明白这个目录的道理就行了. 那么你想,书