关于SqlServer中的null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SqlServer中的null相关的知识,希望对你有一定的参考价值。

一次存储过程中,以null作为if判断条件,存储过程执行的结果没有,而且不是那种空表,而是直接什么结果都没有,只是显示“命令已经执行完”;
而将所有的null替换成'',之后,执行之后,得到了我要的结果。
这是怎么回事呢?

null值在sqlserver中
要用 is null或者 is not null判断
''直接=或者!=就行
参考技术A 应该是你检索条件的问题,可查看一下你的条件:

检索字段 = null

isnull(检索字段,'')

sqlserver中的(NOCOUNT/ANSI_NULLS)选项

1 NOCOUNT选项

当 SET NOCOUNT 为 ON 时,不返回计数。
当 SET NOCOUNT 为 OFF 时,返回计数。

eg:

if object_id(N\'table_test\',N\'U\') IS not null
drop table table_test
go
CREATE TABLE table_test(id INT,name VARCHAR(50))
go
INSERT INTO table_test VALUES(1,\'xiaoming\'),(2,null)
go

SET NOCOUNT ON
SELECT * FROM table_test
GO


SET NOCOUNT OFF
SELECT * FROM table_test
GO

 

2 ANSI_NULLS 选项

SQL92 ANSI/ISO(简称SQL-92)标准要求对空值(NULL)的等于 (=) 或不等于 (<>) 比较取值都为 FALSE。

当 SET ANSI_NULLS 为 ON 时,表示SQL语句遵循SQL-92标准。
字段(column_name) 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。

当 SET ANSI_NULLS 为 OFF 时,表示不遵从 SQL-92 标准。

使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。

eg:

SET ANSI_NULLS ON

SELECT TOP 100 * FROM table_test WHERE name = NULL

GO

 

SET ANSI_NULLS OFF

SELECT TOP 100 * FROM table_test WHERE name = NULL

GO

 

 3 QUOTED_IDENTIFIER选项(引用标识符)

数据库对象的名称即为其标识符。Microsoft SQL Server 中的所有内容都可以有标识符。服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束及规则等)都可以有标识符。

当 SET QUOTED_IDENTIFIER 为 ON 时,

标识符可以由双引号或者”[ ]”分隔,而文字必须由单引号分隔。

当 SET QUOTED_IDENTIFIER 为 OFF 时,

标识符不可加引号,且必须符合所有 Transact-SQL (微软对SQL的扩展)标识符规则。

SET QUOTED_IDENTIFIER OFF
GO
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO

SET
QUOTED_IDENTIFIER ON; GO CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL); GO SELECT "identity","order" FROM "select" ORDER BY "order"; GO
DROP TABLE "SELECT";
GO
SET QUOTED_IDENTIFIER OFF;
GO

4 XACT_ABORT选项

指定当 Transact-SQL 语句出现运行时错误时,SQL Server 是否自动回滚到当前事务。

当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。

IF OBJECT_ID(N\'demo\',N\'U\') IS NOT NULL
DROP TABLE demo
create table demo(id int not null)   
go   
--set xact_abort on 
begin tran   
    insert into demo values (1)   
    insert into demo values (null)  
    insert into demo values (2)   
commit tran   
go 
--set xact_abort off
Select * from demo

 

以上是关于关于SqlServer中的null的主要内容,如果未能解决你的问题,请参考以下文章

关于sqlserver某个字段的update更新操作

关于sqlserver存储过程的问题

关于SQLSERVER的全文目录跟全文索引的区别

关于sqlserve2000和sqlserver2005以后版本配置连接池的一些思路

关于sqlserver2008备份问题

SharePoint 2013 中的SQL Server 安全