昨天在数据库中建立数据表的时候要求显示的添加一些系统语法规则,对于这些设置不知道都是什么含义,这次记录下来供以后学习。

(1)SET ANSI_NULLS ON语句

  T-SQL支持在与空值进行比较时,允许比较运算符返回TRUE或FALSE.通过设置SET ANSI_NULLS OFF可将此项激活。举个例子:  

  当 SET ANSI_NULLS 为 ON 时,SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。即使 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 语句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。

(2)SET QUOTED_IDENTIFIER ON

  在创建一个表时,表名称正好是SQLSERVER的标识符,不管SET QUOTED_IDENTIFIER ON还是SET QUOTED_IDENTIFIER OFF都会提示错误。

  如果想以distinct为表时,在 SET QUOTED_IDENTIFIER on 的情况下是可以把sqlserver的标识符加上双引号来创建以sqlserver标识符为表名的表,但是加单引号也是不可以的。如下图代码

  但是在QUOTED_IDENTIFIER为off的情况下,不管distinct加引号或不加引号或加双引号都是不可以的。因为在QUOTED_IDENTIFIER为off情况下,sqlserver的标识符是不允许加引号的。

(3)SET ANSI_PADDING ON

    建议始终将 ANSI_PADDING 设置为 ON。

  这个选项只在数据表的字符串字段被更新或者新的数据行插入到表中的时候作用。它控制着SQL Server在遇到字符串尾随空格时是否截断空格,以及是否填充空格以达到预定义的字符字段长度。

  当设置为ON时,不将值按列的长度进行填充。不剪裁字符值中插入到varchar列的尾随空格和二进制值中插入到varbinary列的尾随零。

  当设置为OFF时,将值按列的长度进行填充。剪裁varchar列的尾随空格和varbinary列的尾随零。

(4)[DBNAME].[DBO].[TABLE]

  对数据表进行增删改查的时候,经常会见到数据库名称+DBO+数据表的情况,比如select* from [TestDB].[dbo].[usertable]。那么这是什么含义呢?

  [TestDB]好理解,就是指定查询哪一个数据库。

  [dbo]是每个数据库的默认用户,具有所有者权限,即DbOwner。通过用DBO作为所有者来定义对象,能够使数据库中的任何用户引用而不必提供所有者名称。
  比如:你以User1登录进去并建表Table,而未指定DBO,当用户User2登进去想访问Table时就得知道这个Table是你User1建立的,要写上User1.Table,如果他不知道是你建  的,则访问会有问题。如果你建表时把所有者指给了Dbo,则别的用户进来时写上Dbo.Table就行了,不必知道User1。不光表是如此,视图等等数据库对象建立时也要如此才算  是好。

  建表、存储过程、视图等数据库对象时,其对应的所有者是创建它的用户。则除了该用户其他登录用户要引用这些东东时,都要加上前缀,很是麻烦。而且,程序因此易出错,你  查来查去问题确出在这,浪费你时间。

  为什么使用方括号将表名称、库名称括起来的原因:

   这个不是必须要加,但表名或字段名如果引用了sqlserver中的关键字,数据库会不识别这到底是关键字还是表名(或字段名)时就必须要加。

  比如,一个表名叫user,user在sqlserver中属于关键字,那么查询的时候必须要这样:

select from [user]

  否则就会报错。

  同理,如果user属于字段名,也同样要加,如

  select from 表名 where [user]=1
 
  (5)N''是什么意思?
  加上 N 代表存入数据库时以 Unicode 格式存储。N'string' 表示string是个Unicode字符串。例如,'Michél' 是字符串常量而 N'Michél' 则是 Unicode 常量。Unicode 数据中  的每个字符都使用两  个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。
  (6)

SQL数据库一些系统语法含义的更多相关文章

  1. 【数据库】 SQL 常用语句之系统语法

    [数据库] SQL 常用语句之系统语法 1. 获取取数据库服务器上所有数据库的名字 SELECT name FROM master.dbo.sysdatabases 2. 获取取数据库服务器上所有非系 ...

  2. SQL数据库之变量

    --学习SQL数据库,变量是必须要掌握的概念,系统变量就是变量中最重要的变量之一,下面是SQL中系统变量的应用实例 use AdventureWorksDW exec sp_addtype 'char ...

  3. Android - 数据存储 -在SQL数据库中保存数据

    对于重复的或结构化的数据,保存到数据库中是很好的选择,比如联系人信息.这里假设你对SQL数据库大体上了解然后帮助你学习Android上的SQLite数据库.在Android数据库上需要用到的API可以 ...

  4. 【Android Developers Training】 26. 在SQL数据库中保存数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. SQL数据库基础知识-巩固篇<一>

    SQL数据库基础知识-巩固篇<一>... =============== 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用 ...

  6. SQL数据库中临时表、临时变量和WITH AS关键词创建“临时表”的区别

    原文链接:https://www.cnblogs.com/zhaowei303/articles/4204805.html SQL数据库中数据处理时,有时候需要建立临时表,将查询后的结果集放到临时表中 ...

  7. PL/SQL数据库开发那点事

    PL/SQL数据库开发那点事-->编程,存储程序 在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中.如果在SQ ...

  8. 【数据库】 SQLite 语法

    [数据库] SQLite 语法 一 . 创建数据库 1. 只需创建数据库,只需创建文件,操作时将连接字符串指向该文件即可 2. 连接字符串 : data source = FilePath; 不能加密 ...

  9. ASP.NET动态网站制作(16)-- SQL数据库(2)

    前言:SQL数据库的第二节课,继续讲解基本的语句及用法. 内容: 1.insert插入语句  insert into Book(bookName,bookPrice,bookAuthor) value ...

随机推荐

  1. 从锅炉工到AI专家(8)

    ImageNet 基础部分完成,从本篇开始,会略微的增加一些难度. 通常说,在解决问题的时候,大多程序员都会在网上搜索,寻找一些相似相近的案例作为参考.这个方式在机器学习领域同样有效.可惜早期的时候, ...

  2. 封装cookie设置和获取的简易方法

    (function() { var tool = { expires: "expires", // 过期时间expires path: "path", // 路 ...

  3. exec族函数详解及循环创建子进程

    前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...

  4. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  5. WebBrowser Cookie

    WebBrowser的Cookie操作 .在WebBrowser中获取Cookie CookieContainer myCookieContainer = new CookieContainer(); ...

  6. 命令别名设置: alias, unalias

    别名命令:alias 命令别名是一个很有趣的东西,特别是你的惯用指令特别长的时候!还有, 增设默认的选项在一些惯用的指令上面,可以预防一些不小心误杀文件的情况发生的时候! 举个例子来说,如果你要查询隐 ...

  7. Spring Cloud Alibaba Nacos 入门

    概览 阿里巴巴在2018年7月份发布Nacos, Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.并表示在6-8个月完成到生产可用的0.8版本,目前版本是0.9版本. Na ...

  8. JVM 调优参数解释

    典型配置: java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseP ...

  9. react 源码之setState

    今天看了react源码,仅以记录. 1:monorepo (react 的代码管理方式) 与multirepo 相对. monorepo是单代码仓库, 是把所有相关项目都集中在一个代码仓库中,每个mo ...

  10. Axure rp8团队原型图开发

    说道原型图大家都不陌生,Axure rp作为这类工具可以说在网页布局的设计给开发人员提供了很大便利,目前我只熟悉过这一种,不知道小伙伴们有没有其他好用的工具推荐给大家用一下吗.好了,废话不多说,今天给 ...