存储过程中的设置语句含义

这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则。

1. SET ANSI_NULLS ON

Transact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE。

通过设置 ANSI_NULLS OFF 可将此选项激活。
当 ANSI_NULLS 为 OFF 时,
如果 ColumnA 包含 Null 值,则 ColumnA = NULL 之类的比较操作会返回 TRUE;
如果 ColumnA 除了包含 NULL 外还包含某些值,则这类比较操作将返回 FALSE。
比较计算结果为 NULL 的两个表达式也会返回 TRUE。

ANSI_NULLS 设置不影响包含 NULL 的联接列。联接列中包含 NULL 的行不是结果集的一部分。

当 ANSI_NULLS 设置为 OFF 时,以下 SELECT 语句返回 Customer 表中 Region 为 Null 值的所有行:

SELECT CustomerID, AccountNumber, TerritoryID
FROM AdventureWorks.Sales.Customer
WHERE TerritoryID = NULL

如果 SET ANSI_NULLS ON
那么 SQL 语句中, 判断 非空的写法, 要修改为:
WHERE 字段  IS   NULL

因为 SET ANSI_NULLS ON 以后,
NULL = NULL 将 返回 false.

2. SET QUOTED_IDENTIFIER ON

当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。

3. SET ANSI_PADDING ON

https://msdn.microsoft.com/zh-cn/library/ms187403(SQL.90).aspx

在未来的 SQL Server 版本中,ANSI_PADDING 将始终为 ON,且将此选项显式设置为 OFF 的任何应用程序都将产生错误。 请避免在新的开发工作中使用此功能,并着手修改当前使用此功能的应用程序。

下表显示在将值插入含有 charvarcharbinaryvarbinary 数据类型的列时,SET ANSI_PADDING 设置的效果。

设置             char(n) NOT NULL 或 binary(n) NOT NULL             char(n) NULL 或 binary(n) NULL             varchar(n) 或 varbinary(n)            

ON


填充原始值(char 列具有尾随空格的值,binary 列具有尾随零的值),使达到列的长度。


如果 SET ANSI_PADDING 为 ON,则遵从与 char(n)binary(n) NOT NULL 相同的规则。


不剪裁插入 varchar 列中的字符值的尾随空格。 不剪裁插入 varbinary 列中的二进制值的尾随零。 不将值填充到列的长度。


OFF


填充原始值(char 列具有尾随空格的值,binary 列具有尾随零的值),使达到列的长度。


如果 SET ANSI_PADDING 为 OFF,则遵从与 varcharvarbinary 相同的规则。


剪裁插入 varchar 列中的字符值的尾随空格。 剪裁插入 varbinary 列中的二进制值的尾随零。

注意:
        进行填充时,char 列用空格填充,binary 列用零填充。 进行剪裁时,char 列的尾随空格被剪裁,binary 列的尾随零被剪裁。
时间: 2024-10-13 01:43:49

存储过程中的设置语句含义的相关文章

sqlserver 存储过程中拼接sql语句 动态执行

ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @gradeId INT, @cId INT, @keyWords NVARCHAR(100), @userName VARCHAR(50) AS BEGIN DECLARE @sqlfilter VARCHAR(max) SET @sqlfilter = ' ' IF(@schoolId <> -1) S

mysql存储过程中in、out、inout参数使用实际案例

1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)//为了避免存储过程中分号(";")结束语句,我们使用分隔符告诉mysql解释器,该段命令是否已经结束了./**案例功能:求1-n的和开发者:徐守威时间:2016-08-13*/delimiter $create procedure p1(in n int)begin declare total int default 0; declare num int default 0; while num < n d

EF中使用SQL语句或存储过程

EF中使用SQL语句或存储过程或视图 1.无参数查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList(); 2.有参查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes where [email protected] ",new SqlParameter

存储过程中执行动态Sql语句

存储过程中执行动态Sql语句 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql. 1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储

[转][SQL]如何实现存储过程中动态加入条件---没想到语句可以这么巧妙

在存储过程过程中,如果要实现Select查询的where子句动态查询,可以用exec ( "select .... where" [email protected])这样的方式.但这样的话,感觉用存储过程就没什么用了,因为存储过程最大的特点就是将代码编译了放在DBMS中,而调用exec的话,这一部分就无法编译,也就无从优化了.下面是一个比较巧妙的方法去实现所谓的“动态查询”select * from table1 where     a = 1     and ((@id IS NUL

解决存储过程中拼接的SQL字符串超长导致sql语句被截取的问题

今天遇到了一个奇葩的问题:存储过程中的sql字符串拼接的太长,超出了分页存储过程执行sql参数的nvarchar(4000)的长度. 没办法,只能修改自己的存储过程,因为分页存储过程是不能动的. 开始想到的方法是将里层的select语句抽出来,用exec(strInnerSql)执行,将查询胡来的数据放到临时表中,在@s中用临时表获取数据,结果以时报告终 错误原因:执行@s语句的时候找不到执行exec(strInnerSql)产生的临时表 好郁闷啊,怎么会这样呢,明明在一个存储过程中执行的,怎么

SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。

select *from fruit use shuiguo --存储过程格式 create proc 存储过程名 --输入参数:当调用存储过程时,所需要输入的数据 --输出参数:从存储过程中赋值后带出数据 as --存储过程内容 return 返回值 go exec 返回值=存储过程名 参数一,参数二,....参数N --进销存存储过程 alter proc Jinchuhuo --定义函数名,相当于C#语言里的 public int 函数名 @ids varchar(50), --定义变量,

怎样SQL存储过程中执行动态SQL语句

MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码.EXEC在某些情况下会更灵活.除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处

EF中使用SQL语句或存储过程(小笔记)

1.无参数查询 var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList(); 2.有参查询 var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes where [email protected] ",new SqlParameter("@ID",