美高梅棋牌官网下载-美高梅棋牌官方版下载

大家可以在美高梅棋牌官网下载当中进行野外生存的游戏、也可以泡泡温泉、吃吃烧烤,美高梅棋牌官方版下载成为卓越不凡的超级娱乐企业巨头,注册可提款,通过该系统的运作,以最为合适的娱乐方式将客户传递到最佳平台。

数据操纵语言DML,以大小写敏感编写SQL语句

2019-10-07 17:53栏目:美高梅棋牌官网下载
TAG:

目录

摘要 本文是参考相关资料总结的一篇关于T-SQL语言编程规范的文章,旨在为需要这方面资料的IT公司设计开发人员提供一个参考。
来源:

1.  概述
1.1. 基本原则
以大小写敏感编写SQL语句。
尽量使用Unicode 数据类型。
优先使用连接代替子查询或嵌套查询。
尽量使用参数化SQL查询代替语句拼接SQL查询。
禁止使用[拼音]+[英语]的方式来命名SQL对象或变量。
尽量使用存储过程代替SQL语句。

  • 1.使用Transact-SQL语言编程
    • 1.1.数据定义语言DDL
    • 1.2.数据操纵语言DML
    • 1.3.数据控制语言DCL
    • 1.4.Transact-SQL语言基础
  • 2.运算符
    • 2.1.算数运算符
    • 2.2.赋值运算符
    • 2.3.位运算符
    • 2.4.比较运算符
    • 2.5.逻辑运算符
    • 2.6.连接运算符
    • 2.7.一元运算符
    • 2.8.运算符的优先级
  • 3.控制语句
    • 3.1.BEGIN END语句块
    • 3.2.IF ELSE语句块
    • 3.3.CASE分支语句
    • 3.4.WHILE语句
    • 3.5.WAITFOR延迟语句
    • 3.6.RETURN无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.TRY CATCH错误处理语句
  • 4.常用函数
    • 4.1.数据类型转换函数

概述

1.2. 基本规范
建议采用Pascal样式或Camel样式命名数据库对象。
大写T-SQL语言的所有关键字,谓词和系统函数。

1.使用Transact-SQL语言编程

尽管SQL Server 2008提供了图形化界面,但只有一种Transact-SQL语言能够直接与数据库引擎进行交互。根据执行功能特点可以将Transact-SQL语言分成3大类:数据定义语言DDL,数据操纵语言DML,数据控制语言DCL。

1.1.基本原则

以大小写敏感编写SQL语句。

尽量使用Unicode 数据类型。

优先使用连接代替子查询或嵌套查询。

尽量使用参数化SQL查询代替语句拼接SQL查询。

禁止使用[拼音]+[英语]的方式来命名SQL对象或变量。

尽量使用存储过程代替SQL语句。

2.  命名规范
在一般情况下,采用Pascal样式或Camel样式命名数据库对象,使在开发基于数据库应用程序的时候通过ORM工具生成的数据访问代码不需要调整就符合程序开发语言(比如C#)命名规范。另外,关系型数据库同Xml结合得越来越紧密,规范的命名越来越重要。
在实际数据库开发过程中,如果需求方已经提供数据库设计方案,建议以提供的方案为准;在原有数据库上进行升级开发时,在可行的情况下可适当做出设计调整以符合编程规范。

1.1.数据定义语言DDL

是最基础的Transact-SQL语言类型,用来创建数据库和创建,修改,删除数据库中的各种对象,为其他语言的操作提供对象。例如数据库,表,触发器,存储过程,视图,函数,索引,类型及用户等都是数据库中的对象。常见的DDL语句包括

CREATE TABLE--创建表
DROP TABLE--删除表
ALTER TABLE--修改表

1.2.基本规范

建议采用Pascal样式或Camel样式命名数据库对象。

大写T-SQL语言的所有关键字,谓词和系统函数。

1.3. 对象命名
1.3.1.  数据库
第一种方式,采用Pascal样式命名,命名格式为[项目英文名称]。
示例:AdventureWorks
第二种方式,采用Pascal样式命名,命名格式为[项目英文名称] + Db。
示例:AdventureWorksDb
  BizTalkRuleEngineDb
建议采用第一种方式。

1.2.数据操纵语言DML

是用于操纵表和视图中的数据的语句,例如查询数据(SELECT),插入数据(INSERT),更新数据(UPDATE)和删除数据(DELETE)等。

命名规范

在一般情况下,采用Pascal样式或Camel样式命名数据库对象,使在开发基于数据库应用程序的时候通过ORM工具生成的数据访问代码不需要调整就符合程序开发语言(比如C#)命名规范。另外,关系型数据库同Xml结合得越来越紧密,规范的命名越来越重要。

在实际数据库开发过程中,如果需求方已经提供数据库设计方案,建议以提供的方案为准;在原有数据库上进行升级开发时,在可行的情况下可适当做出设计调整以符合编程规范。

1.3.2.  数据库文件
数据文件:[数据库名称] + _Data.mdf
日志文件:[数据库名称] + _Log.ldf
示例:AdventureWorks_Data.mdf
      AdventureWorks_Log.ldf

1.3.数据控制语言DCL

涉及到权限管理的语言称为数据控制语言,主要用于执行有关安全管理的操作。如授予权限(GRANT),收回权限(REVOKE),拒绝授予主体权限,并防止主体通过组或角色成员继承权限(DENY

1.3.对象命名

1.3.3.  关系型数据仓库
采用Pascal样式命名,命名格式为[项目英文名称] + DW。
示例:AdventureWorksDW

1.4.Transact-SQL语言基础

1.3.1. 数据库

第一种方式,采用Pascal样式命名,命名格式为[项目英文名称]。

示例:AdventureWorks

第二种方式,采用Pascal样式命名,命名格式为[项目英文名称]

  • Db。

示例:AdventureWorksDb

  BizTalkRuleEngineDb

建议采用第一种方式。

1.3.4.  数据架构
除SQL Server 系统定义的数据架构外,新建架构采用Pascal样式命名,命名格式为[架构名]。
示例:HumanResources
      Production

1.4.1.常量与变量

常量不多说。在SQL Server 2008中,存在两种变量。一种是系统定义和维护的全局变量,一种是用户定义用来保存中间结果的局部变量。

1.3.2. 数据库文件

数据文件:[数据库名称] + _Data.mdf

日志文件:[数据库名称] + _Log.ldf

示例:AdventureWorks_Data.mdf

      AdventureWorks_Log.ldf

对数据库对象 Table,View,Procedure,Function等使用数据架构进行归类。在SQL Server 2000中dbo为默认架构。

1.4.1.1.系统全局变量

系统全局变量分为两大类,一类是与当然SQL Server连接或与当前处理有关的全局变量,如@@Rowcount表示最近一个语句影响的行数。@@error表示保存最近执行操作的错误状态。一类是与整个SQL Server系统有关的全局变量,如@@Version表示当前SQL Server的版本信息。

SELECT @@VERSION AS 当前版本;--查看当前SQL Server的版本信息

结果如图所示
美高梅棋牌官网下载 1

1.3.3. 关系型数据仓库

采用Pascal样式命名,命名格式为[项目英文名称]

  • DW。

示例:AdventureWorksDW

1.3.5.  数据表
采用Pascal样式命名,命名格式为[表名]。
示例:Employee
      Product

1.4.1.2.局部变量

局部变量能够拥有特定数据类型,有一定的作用域,一般用于充当计数器计算或控制循环执行次数,或者用于保存数据值。局部变量前只有1个@符,用DECLARE语句声明局部变量。

USE test
DECLARE @StudentId varchar(20)
SET @StudentId=(
SELECT Student.stu_no
FROM Student
WHERE stu_enter_score='603')
SELECT @StudentId AS 入学分数为603的学生学号
GO

结果如图所示
美高梅棋牌官网下载 2

1.3.4. 数据架构

除SQL Server 系统定义的数据架构外,新建架构采用Pascal样式命名,命名格式为[架构名]。

示例:HumanResources

      Production

对数据库对象 Table,View,Procedure,Function等使用数据架构进行归类。在SQL Server 2000中dbo为默认架构。

表名以英文单数命名,主要是参考SQL Server 2005示例数据库,个人理解不采用复数是为了更好的使用ORM工具生成符合编程规范的代码(比如C#)。
示例:使用Product
  而不是Products

2.运算符

1.3.5. 数据表

采用Pascal样式命名,命名格式为[表名]。

示例:Employee

      Product

表名以英文单数命名,主要是参考SQL Server 2005示例数据库,个人理解不采用复数是为了更好的使用ORM工具生成符合编程规范的代码(比如C#)。

示例:使用Product

 而不是Products

1.3.6.  数据视图
视图名称采用Pascal样式命名,命名格式为v + [视图名称]。
示例:vEmployee
      vSalesPerson

2.1.算数运算符

在SQL Server 2008中,算数运算包括加(+)减(-)乘(*)除(/)取模(%)。举一个简单的例子。
示例1:在Student表中添加一列,列名为stu_age,根据Student表的stu_birthday列计算stu_age列并插入数据。(演示插入整列数据的方法)
Student表数据如图所示
美高梅棋牌官网下载 3
执行下面的语句

ALTER TABLE Student
ADD stu_age int;--在Student表中添加stu_age列
CREATE TABLE #agetemp(stu_no varchar(8),age int);--新建一个临时表
INSERT INTO #agetemp(stu_no,age)--在临时表中插入学号和计算出来的年龄
SELECT Student.stu_no,YEAR(GETDATE())-YEAR(stu_birthday)--利用函数和运算符计算年龄
FROM Student;
UPDATE Student
SET Student.stu_age=#agetemp.age--将临时表中的age列数据整个复制到Student表的stu_age列
FROM #agetemp
WHERE Student.stu_no=#agetemp.stu_no--条件是两个表的stu_no列值相等
GO
SELECT * FROM Student

结果如图所示
美高梅棋牌官网下载 4

1.3.6. 数据视图

视图名称采用Pascal样式命名,命名格式为v

  • [视图名称]。

示例:vEmployee

      vSalesPerson

1.3.7.  数据列
列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。采用Pascal样式命名,命名格式为[列名称]。
示例:AddressID
      PostalCode

2.2.赋值运算符

即等号(=),将表达式的值赋予另一个变量。举一个简单的例子。
示例2:计算Student表中学生的平均入学成绩并打印。
Student表的数据如图所示,stu_enter_score列存放了学生的入学成绩
美高梅棋牌官网下载 5
执行下面的语句

DECLARE @average int--声明@average变量
SET @average=(--将计算出的平均值赋值给@average
SELECT AVG(stu_enter_score)
FROM Student)
PRINT @average--打印@average的值

结果如图所示
美高梅棋牌官网下载 6

1.3.7. 数据列

列名称命名采用英文单词或缩写,英文单词只来自于具体业务定义,尽量表达清楚含义。采用Pascal样式命名,命名格式为[列名称]。

示例:AddressID

      PostalCode

尽量避免使用拼音命名,如果不可避免,对于比较短的列名,采用拼音全写,如果拼音列名比较复杂,可以采用首个字用全拼,其它字用首字母大写表示。

示例:宁波 Ningbo

  经营方式 JingYFS

尽量避免使用拼音命名,如果不可避免,对于比较短的列名,采用拼音全写,如果拼音列名比较复杂,可以采用首个字用全拼,其它字用首字母大写表示。
示例:宁波 Ningbo
  经营方式 JingYFS

2.3.位运算符

位运算符包括与运算(&),或运算(|)和异或运算(^),可以对两个表达式进行位操作,这两个表达式可以是整型数据或二进制数据。Transact-SQL首先把整型数据转换为二进制数据,然后按位运算。举个简单的例子。
示例3:声明2个int型变量@num1,@num2,对这两个赋值且做与或异或运算。
执行下面的语句

DECLARE @num1 int,@num2 int
SET @num1=5 
SET @num2=6
SELECT @num1&@num2 AS 与,
@num1|@num2 AS 或,
@num1^@num2 AS 异或

结果如图所示
美高梅棋牌官网下载 7
扩展示例4:写一个十进制转换为二进制的函数

CREATE FUNCTION Bin_con_dec(@dec int)--定义十进制转换为二进制函数
RETURNS varchar(20)
AS
BEGIN
DECLARE @quo int,@remainder varchar(20),@quo1 int
SET @quo=@dec
SET @remainder=''
WHILE @quo<>0
BEGIN
SET @quo1=@quo/2
SET @remainder=CAST(@quo%2 AS varchar(20))+@remainder
SET @quo=@quo1
END
RETURN @remainder
END

执行上面的函数后,运行下列语句验证函数正确性

PRINT dbo.Bin_con_dec(42)

结果为101010,函数定义正确。

1.3.8. 存储过程

建议采用Pascal样式命名,命名格式为[存储过程名称]。

示例:GetUser

     AddUser

备注:在SQL Server 2005示例数据库中使用Camel样式命名。

1.3.8.  存储过程
建议采用Pascal样式命名,命名格式为[存储过程名称]。
示例:GetUser
     AddUser

2.4.比较运算符

也称关系运算符,用于比较两个值的关系,常见的有等于(=),大于(>),小于(<),大于等于(>=),小于等于(<=),不等于(<>或!=)
示例5:从Student表中查询入学成绩在平均分以上的学生信息
Student表的数据如图所示
美高梅棋牌官网下载 8
执行下列语句

DECLARE @ave int
SET @ave=(SELECT AVG(stu_enter_score) FROM Student)
SELECT *FROM Student
WHERE stu_enter_score>=@ave;

结果如下图所示
美高梅棋牌官网下载 9

注:不能直接把代码写成下面的形式

SELECT * FROM Student
WHERE stu_enter_score>=AVG(stu_enter_score)

消息147,级别15,状态1,第2 行
聚合不应出现在WHERE 子句中,除非该聚合位于HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

因为AVG是聚合函数。

1.3.9. 函数

自定义函数采用Pascal样式命名,命名格式为[函数名],系统函数使用全部大写。

示例:SELECT ISNULL(@LastName,'Unknown last name');

GETDATE()

备注:在SQL Server 2005示例数据库中使用Camel样式命名。

2.5.逻辑运算符

逻辑运算符的作用是对条件进行测试。ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,ALL,SOME。下面用SOME来举例。SOME的作用是如果在一组比较中,有些为true那就为true。
示例6:查询Student表中是否存在入学成绩高于平均分的学生,如果存在,输出true,不存在输出false。
Student表的stu_enter_score列(入学成绩)数据如图所示
美高梅棋牌官网下载 10
执行下面的语句

USE test
IF (SELECT AVG(stu_enter_score) FROM Student)<=SOME(SELECT stu_enter_score FROM Student)
PRINT 'true'
ELSE
PRINT 'false'
GO

结果如图所示
美高梅棋牌官网下载 11

1.3.10.     用户定义数据类型

采用Pascal样式命名,命名格式为[自定义数据类型名称]。

示例:Flag

      NameStyle

1.3.9.  函数
自定义函数采用Pascal样式命名,命名格式为[函数名],系统函数使用全部大写。
示例:SELECT ISNULL(@LastName,'Unknown last name');
GETDATE()

2.6.连接运算符

加号(+)是字符串连接运算符,可以用它把字符串串连起来,在示例4的十进制转二进制函数中,就用上了加号。
示例7:将Student表的stu_name列和stu_enter_score列放在同一列显示,列名为score
Student表的数据如图所示
美高梅棋牌官网下载 12
执行下列语句

SELECT stu_name+CAST(stu_enter_score AS VARCHAR(3)) AS score FROM Student

执行结果如图所示
美高梅棋牌官网下载 13

注:stu_enter_score列数据类型为int,加号只对字符串类型数据有效,因此要用CAST函数将stu_enter_score的数据类型转换为varchar(3),这样才能实现字符串拼接。

1.3.11.     DML触发器

DML触发器是当数据库服务器中发生数据操作语言 (DML) 事件时要执行的操作。DML 事件包括对表或视图发出的 UPDATE、INSERT 或 DELETE 语句。根据事件不同命名规则使用前缀进行区分,格式为 [u|i|d] + [表名|视图名]

示例:uEmployee

  iEmployee

      dEmployee

另外一种方式为,

AFTER 触发器:TR_表名_[后面插入加I,修改加U,删除加D]。

INSTEAD OF 触发器:TR_表名或视图名_OF[后面插入加I,修改加U,删除加D]

1.3.10.     用户定义数据类型
采用Pascal样式命名,命名格式为[自定义数据类型名称]。
示例:Flag
      NameStyle

2.7.一元运算符

一元运算符只对一个表达式执行操作,该表达式可以是数字数据类型中的任何一种数据类型。SQL Server 2008提供的一元运算符包含正(+),负(-),位反(~)。
示例8:声明一个int数据类型变量@num并赋值,对该变量做正负位反操作。
执行下列语句

DECLARE @num INT
SET @num=45
SELECT +@num AS 正,-@num AS 负,~@num AS 位反
GO

结果如图所示
美高梅棋牌官网下载 14

注:位反操作符用于取一个数的补数,只能用于整数。

1.3.12.     DDL触发器

响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。

采用Camel样式命名,命名单词能够描述DDL触发器功能。

示例:

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

美高梅棋牌官网下载 ,   PRINT 'You must disable Trigger "safety" to drop or alter tables!'

   ROLLBACK ;

另外一种方式为添加ddl前缀,

示例:

CREATE TRIGGER [ddlDatabaseTriggerLog]

ON DATABASE

FOR DDL_美高梅棋牌官方版下载 ,DATABASE_LEVEL_EVENTS

AS

1.3.11.     DML触发器
DML触发器是当数据库服务器中发生数据操作语言 (DML) 事件时要执行的操作。DML 事件包括对表或视图发出的 UPDATE、INSERT 或 DELETE 语句。根据事件不同命名规则使用前缀进行区分,格式为 [u|i|d] + [表名|视图名]
示例:uEmployee 
  iEmployee
      dEmployee

2.8.运算符的优先级

优先级 运算符
1 ~(位反)
2 *(乘),/(除),%(取模)
3 +(正),-(负),+(加),+(连接),-(减),&(位与)
4 =,>,<,>=,<=,<>,!=,!>,!<(比较运算符)
5 ^(位异或),位或(符号打不出来,前面有,自己翻)
6 NOT
7 AND
8 ALL,ANY,BETWEEN,IN,LIKE,ALL,SOME
9 =(赋值)

当表达式中的运算符有相同的优先级时,按照它们在表达式中的位置,一元运算符按从右往左运算,二元运算符(对两个表达式作用的运算符)按从左往右运算。
示例9:验证运算符优先级
执行下列语句

DECLARE @result INT,@num INT
SET @num=45
SET @result=@num+(~@num)*4-@num/(~@num)
SELECT @result AS result
GO

结果如图所示
美高梅棋牌官网下载 15
计算代码中的表达式
@result=@num+(~@num)4-@num/(~@num)
=@num+(-46)
4-@num/(-46)
=45+(-46)4-45/(-46)
=45+(-46)
4
=-139

1.3.13.     主键、外键关系和索引

主键: PK_[表名称]_[主键];如果是组合主键,使用PK_[表名]_[主键1]_[主键2]。

示例:PK_Store_CustomerID

  PK_StoreContact_CustomerID_ContactID

外键关系:FK_[从表名称]_[主表名称]_[外键列名称]。

示例:FK_StoreContact_Store_CustomerID

聚集索引:PK_[表名称]_[主键];如果是组合主键,使用PK_[表名]_[主键1]_[主键2]。

示例:PK_Store_CustomerID

  PK_StoreContact_CustomerID_ContactID

唯一非聚集索引:AK_[表名称]_[列名称]。

示例:AK_Store_rowguid

不唯一非聚集索引:PK_[表名称]_[列名称]。

示例:IX_Store_SalesPersonID

主 XML索引:PXML_[表名称]_[Xml类型列名称]。

示例:PXML_Store_Demographics

备注:以上命名参考Sql Server 2005示例数据库,一般只需设计器自动生成,不需要额外修改。

另外一种方式为,
AFTER 触发器:TR_表名_[后面插入加I,修改加U,删除加D]。
INSTEAD OF 触发器:TR_表名或视图名_OF[后面插入加I,修改加U,删除加D]

3.控制语句

1.4.参数命名

1.3.12.     DDL触发器
响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。
采用Camel样式命名,命名单词能够描述DDL触发器功能。
示例:
CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK ;

3.1.BEGIN END语句块

BEGIN END可以定义SQL Server语句块,使这些语句作为一组语句执行,允许语句嵌套。举例请见示例4

1.4.1. 数据列参数

命名格式为 @ + [列名称]。

示例:@EmployeeID

在列名不符合Pascal样式时(早期遗留系统),例如使用全部大写的列名称,或使用“_”进行连接的字段名称,参数名称定义使用 @ + [列名称],这里的列名称尽量符合Pascal样式命名。

另外一种方式为添加ddl前缀,
示例:
CREATE TRIGGER [ddlDatabaseTriggerLog] 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS

3.2.IF ELSE语句块

用于指定T-SQL语句的执行条件,若条件为真,则执行条件表达式后面的语句,条件为假时,可以试用ELSE关键字指定要执行的T-SQL语句。举例请见示例4

1.4.2. 非数据列参数

在参数无法跟列名称进行关联时,使用能够反映该参数功能的英文单词或单词组合, 采用Pascal样式命名。

示例:@ErrorID

      @Flag

1.3.13.     主键、外键关系和索引
主键: PK_[表名称]_[主键];如果是组合主键,使用PK_[表名]_[主键1]_[主键2]。
示例:PK_Store_CustomerID
  PK_StoreContact_CustomerID_ContactID
外键关系:FK_[从表名称]_[主表名称]_[外键列名称]。
示例:FK_StoreContact_Store_CustomerID

版权声明:本文由美高梅棋牌官网下载发布于美高梅棋牌官网下载,转载请注明出处:数据操纵语言DML,以大小写敏感编写SQL语句