数据库与程序设计
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图 目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图 第 5 章 存储过程和触发器 第 6 章 基于Web的数据库开发技术 第 7 章 数据库应用开发案例 第 8 章 数据库安全性与维护 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
第2章 SQL Server基础 2.1 MS SQL Server2005的安装与配置 2.2 Transact-SQL语言基础 2017/2/28 第2章 SQL Server基础 2.1 MS SQL Server2005的安装与配置 2.2 Transact-SQL语言基础 2.3 T-SQL其他语言元素 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.1 MS SQL Server 2005功能简介 1. 企业数据管理 提供管理控制台,使数据管理员能够在任何地方监视、管理和调谐企业中所有的数据库。主要体现在以下几方面: (1)可用性。高度可用性技术、补充备份与恢复功能以及复制增强特性等。 (2)伸缩性。表分区、快照隔离和64位支持等伸缩特性。 (3)安全性。缺省安全保障设置、数据库加密和安全模型等增强特性。 (4)易管理性。利用管理工具套件、自我调节能力和功能强大的新式编程模型,数据库管理员可以针对数据库的日常运转进行灵活掌控。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.1 MS SQL Server 2005功能简介 2. 应用开发 在数据库上开发应用程序可以分成两个方面: (1)Transact-SQL(T-SQL),是用于SQL Server的功能最强大的编程语言,用户可以通过编写T-SQL查询语句来完成对数据库的操作。 (2)通用语言运行时CLR(Common Language Runtime),CLR是微软.Net框架的一部分,用来管理用任意支持的语言编写的程序执行、允许他们分享用任意语言编写的通用的面向对象的类的程序。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.1 MS SQL Server 2005功能简介 2. 应用开发 程序员使用任何语言,如:Visual Basic、Visual C++、或者C# 编写的程序,经过编译成程序中间件的形态,称为Common Intermediate Language(通用中间语言,CIL),成为被CLR管理和执行的PE文件。 在SQL Server 2005中,CLR允许编程人员直接在SQL Server 中创建存储过程,触发器,用户定义函数,集合和类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.1 MS SQL Server 2005功能简介 3. 商业智能 商业智能(Business Intelligence,BI)不是专指一项具体的技术,它是一种解决方案,其目的就是把用户积累下来的、大量的数据转化为业务人员容易理解的信息。包括: 数据仓库(Data Warehouse,DW)、 联机分析处理(On-Line Analytical Processing ,OLAP)、 数据挖掘(Data Mining,DM)、 决策支持系统(Decision Support System,DSS)等技术。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 1.数据库服务器Microsoft SQL Server 2005的安装 下表给出了SQL Sever2005(32位)所需的最低软硬件环境要求 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 软硬件类型 最低要求 CPU(处理器) 500 MHz 或更快处理器(推荐 1 GHz 或更快) 内存容量 除Express Edition版本128M外,其余版本至少512M,建议1GB或更大 硬盘空间 完全安装需要350 MB硬盘空间,要安装示例数据库还需要390 MB 显示器 VGA或更高分辨率,SQL server2005图形工具要求1024*768或更高的屏幕分辨率 光盘驱动器 单机需要,也可以通过网络上的共享光盘驱动器安装 操作系统 SQL Server 2005 Enterprise Edition和Standard Edition可在以下操作系统上运行: Windows Server 2003 Standard Edition/ Enterprise Edition / Datacenter Edition Windows Small Business Server 2003 Standard Edition / Premium Edition Windows 2000 Server/ Advanced Server/ Datacenter Server SQL Server 2005 Workgroup Edition可在以上列出的操作系统上运行,此外还包括: Windows XP Professional/ Media Edition/ Tablet Edition(SP2或更高版本) Windows 2000 Professional(SP4或更高版本) SQL Server 2005 Developer Edition 和 Express Edition可在以上列出的操作系统上运行,此外还包括: Windows XP Home Edition(SP2或更高版本) Windows Server 2003 Web Edition4(仅限于 Express) 其他需求 Internet Explorer 6.0或更高版本 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 1.数据库服务器Microsoft SQL Server 2005的安装 安装步骤详见教材P35~37 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 在安装的“Microsoft SQL Server 2005”程序组中,有两个重要的工具: “SQL Server Management Studio”,完成数据库的操作 “配置工具”程序组中的“SQL Server Configuration Manager”,负责数据库服务器本身的配置。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 1. SQL Server Management Studio 工具SQL Server Management Studio用于通过控制台完成数据库的操作,即数据库管理员可以通过SQL命令方式来操作数据库。 执行 “SQL Server Management Studio”,显示数据库服务器连接界面,如图2-13所示。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 1. SQL Server Management Studio 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 在图2-13中,单击“连接”按钮,连接数据库服务器,如图2-14所示。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 1. SQL Server Management Studio 在“Microsoft SQL Server Management Studio”中可以进行数据库的操作,包括创建数据库,数据表,进行数据的维护等操作。 详细介绍见第3、4、5章。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 2. SQL Server Configuration Manager SQL Server Configuration Manager工具负责数据库服务器本身的配置。 数据库管理员(DBA)通过图2-15 的“SQL Server Configuration Manager”界面可以一并管理SQL Server 所提供的服务、服务器与客户端通信协议以及客户端其他的的基本配置管理。 执行“SQL Server Configuration Manager”程序,如图2-15所示。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 2. SQL Server Configuration Manager 在SQL Server Configuration Manager窗口中,右侧窗格显示了目前各种服务的状态,在某种服务上右单击,可以停止、开启SQL Server等服务,来完成数据库的维护。 例如,要复制数据库文件,首先应该停止SQL Server服务,文件复制完毕后,重新开启该服务。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 2. SQL Server Configuration Manager 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 2. SQL Server Configuration Manager 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.1 MS SQL Server2005的安装与配置 2.1.2 安装MS SQL Server2005 http://msdn.microsoft.com/zh-cn/library/ms203721(SQL.90).aspx 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 SQL全称为Structured Query Language 即结构化查询语言,是关系数据库管理系统的标准语言,用于存取数据以及查询、更新和管理关系数据库系统。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 1. SQL语言简介 1986年美国国家标准局(ANSI)制定了SQL标准文本(简称ANSI SQL-86)。此后不断修改、扩充和完善, 1992年,国际标准化组织(ISO)发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。 尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL标准。 SQL-2003标准包含了XML相关内容,自动生成列值;SQL-2006标准定义了SQL与XML(包含XQuery)的关联应用。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 1. SQL语言简介 目前,绝大多数流行的关系型数据库管理系统(如Oracle、Sybase、Microsoft SQL Server、Access等)都采用了SQL语言标准,使不同数据库系统之间可以相互操作。 SQL已成为关系数据库领域中一个主流语言。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 2. SQL语言的特点 其主要特点包括: (1)综合统一 语言风格统一,是一种一体化的语言,包括数据定义、数据查询、数据操纵和数据控制功能,可以独立完成数据库的全部操作。 SELECT sno,sname,sdept FROM student WHERE ssex=N'女' 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 2. SQL语言的特点 (2)高度非过程化 它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,即只具体提出“做什么”而无须知道“怎么做”。 因此,具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。 (3)面向集合的操作方式 核心是查询,操作对象、查询结果、更新数据均可以是元组的集合。 Sno (学号) Sname (姓名) Ssex (性别) Sdept (专业) Szzmm (政治面貌) Sresume (简历) Sbirthday (生日期) 2005001 张兰 女 信管 党员 null 1990-10-10 2005002 王小惠 工商 团员 1991-3-12 2005003 李力 男 1989-8-18 2005004 胡晨 会计 1990-1-1 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 2. SQL语言的特点 (4)以同一种语法结构提供两种使用方式 SQL既是自含式语言,又是嵌入式语言。 SQL作为自含式语言,能够独立地用于联机交互的使用方式直接操作。 作为嵌入式语言,SQL语句可以嵌入到如VB、PB等的前端开发平台上,利用前端工具的计算能力和SQL的数据库操纵能力,可以快速地建立数据库应用程序。 (5)语言简洁,易学易用 SQL语言类似于人类的自然语言,即接近英语,只用几个英文单词的组合就能完成所有功能。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 3. SQL语言的构成 (1)数据定义语言(Data Definition Language,DDL):用于定义关系数据库的模式、外模式和内模式,以实现对数据库、基本表、视图及索引文件的定义、修改和删除等操作。 最常用的DDL语句是: CREATE语句,创建数据库对象结构; DROP语句,删除数据库对象; ALTER语句,修改数据库对象结构。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 3. SQL语言的构成 (2)数据操作语言(Data Manipulation Language,DML):用于完成数据查询和数据更新操作。其中数据更新指对数据进行插入、删除和修改操作。 最常使用的DML语句是: SELECT语句,查询数据; INSERT语句,添加数据; UPDATE语句,修改数据; DELETE语句,删除数据。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 3. SQL语言的构成 (3)数据控制语言(Data Control Language,DCL):用于控制对数据库的访问,服务器的关闭、启动等操作。 常使用的DCL命令有: GRANT语句,允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限; REVOKE语句,废除某用户或某组或所有用户访问权限; COMMIT语句,提交当前事务; ROLLBACK语句,即“回滚”,删除由一个或多个部分完成的事务执行的更新。 为在应用程序、数据库或系统错误后还原数据库的完整性,需要使用回滚 。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 4. Transact-SQL语言简介 Transact-SQL语言即T-SQL,是微软公司遵循ANSI SQL-92标准在Microsoft SQL Server系统中使用的语言。 在SQL的基础上扩展,通过SQL Server的数据引擎来分析和运行。 是使用 SQL Server 的核心,通过它,可以定义变量、使用流控制语句、自定义函数、自定义存储过程等,并且与 SQL Server 实例通信的所有应用程序都通过将 Transact-SQL 语句发送到服务器来实现的。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 4. Transact-SQL语言简介 在Microsoft SQL Server 2005系统中,根据Transact-SQL语言的功能特点,把Transact-SQL语言分成5部分: 数据定义语言、 数据操纵语言、 数据控制语言、 事务管理语言 附加的语言元素。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 4. Transact-SQL语言简介 (1)数据定义语言(DDL)用于定义和管理数据库以及数据库中各种对象,主要包括CREATE语句、ALTER语句、DROP语句。 在SQL Server中,数据库对象包括表、视图、触发器、存储过程、规则、默认、索引、函数、用户自定义的数据类型等。 这些对象的创建、修改和删除等都可以通过使用CREATE、ALTER、DROP等Transact-SQL语句来完成。 DDL还包括安全保密定义,如口令、级别、存取权限等。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 4. Transact-SQL语言简介 (2)数据操纵语言(DML)实现对数据库中数据的基本操作,如查询、插入、修改和删除,主要包括SELECT、INSERT、UPDATE、DELETE等语句。 (3)数据控制语言(DCL)实现有关安全管理的操作,用来设置或更改数据库用户或角色权限,主要包括GRANT、REVOKE和DENY等语句。 (4)事务管理语言(TML)用来管理显式事务,主要包括BEGIN TRANSACTION、COMMIT TRANSACTION、ROLLBACK TRANSACTION等语句。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.1 SQL语言和Transact-SQL语言 4. Transact-SQL语言简介 标识符(对象的名字)、 数据类型、 变量和常量、 运算符、 表达式、 函数、 控制流语言、 错误处理语言、 注释等。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 1. T-SQL语句的功能 在数据库上执行的大部分工作都由 SQL 语句完成。在程序中,可以组织SQL语句发送给数据库,数据库再执行相应的操作。 在Microsoft SQL Server 2005中,T-SQL语句主要完成以下功能: ①创建数据库及数据库对象; ②操纵数据; ③控制程序流程; ④定义变量; ⑤控制事务处理; ⑥安全管理。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 2. T-SQL语句的语法规定 下面以ALTER TABLE语句为例介绍T-SQL语句的一般格式描述及语法规定。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 2. T-SQL语句的语法规定 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 2. T-SQL语句的语法规定 在T-SQL语句格式描述中,对数据库对象名的 Transact-SQL 引用一般是由四部分组成的名称,其格式如下: server_name.[database_name].[schema_name].object_name (服务器名.数据库名.架构名.对象名) | database_name.[schema_name].object_name | schema_name.object_name | object_name 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 2. T-SQL语句的语法规定 其中: server_name:指定链接的服务器名称或远程服务器名称; database_name:如果对象驻留在 SQL Server 的本地实例中,则指定 SQL Server 数据库的名称;如果对象在链接服务器中,则 database_name 将指定 OLE DB 目录。 schema_name:如果对象在 SQL Server 数据库中,则指定包含对象的架构的名称。如果对象在链接服务器中,则 schema_name 将指定 OLE DB 架构名称。 架构是一组数据库对象的集合,它被单个负责人(可以是用户或角色)所拥有并构成唯一命名空间。你可以将架构看成是对象的容器。 object_name:对象的名称。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 2. T-SQL语句的语法规定 表2-2 对象名引用的有效格式 对象引用格式 说明 server.database.schema.object 四个部分的名称。 server.database..object 省略架构名称。 server..schema.object 省略数据库名称。 server...object 省略数据库和架构名称。 database.schema.object 省略服务器名。 database..object 省略服务器和架构名称。 schema.object 省略服务器和数据库名称。 object 省略服务器、数据库和架构名称。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 2. T-SQL语句的语法规定 (1)语句中的字母大小写均可; (2)关键字(保留字)有特殊用途,不得使用标识符; (3)语句中的日期型常量和字符型常量必须用单引号括起来; (4)语句中的标点符号必须用英文标点,即半角符号; (5)一条语句可以分行写,一行也可以写多条语句。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 3. 简单输出语句 数据的简单输出主要使用PRINT语句或通过SELECT语句无源查询来实现。 (1)PRINT语句 PRINT语句的语法格式如下: PRINT 常量 | @局部变量 | 表达式 | 函数 说明:PRINT语句一次只能输出一个常量或一个局部变量值或一个表达式的值。 例如:PRINT 369+2 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.2 T-SQL语句的功能及语法规定 3. 简单输出语句 (2)SELECT语句无源查询 SELECT 常量 | 变量 | 函数 | 表达式 [as 别名] [,…n] 说明: SELECT语句无源查询一次可以输出若干个表达式的值,数据以列方式输出,每一列可起一个列别名。 [as 别名]用于起列别名,别名一般用单引号括起来。 [,…n]表示可以同时输出多个表达式的值。 例如:SELECT 369 AS ‘A1’, 369+2 AS ‘A2’ 或 SELECT 369 AS A1, 369+2 AS A2 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 数据库对象的名称即为其标识符。 Microsoft SQL Server 2005 中的所有内容都可以有标识符。 服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束及规则等)都可以有标识符。 大多数对象要求有标识符,例如创建视图时必须定义表的标识符。 但有些对象的标识符是可选的,例如创建约束时其标识符由系统自动生成,用户不必给出。 对象标识符是在定义对象时创建的。标识符随后用于引用该对象。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 例如,下列语句创建一个标识符为sc的表,该表中有三列的标识符分别是 sno、cno和grade: CREATE TABLE sc ( sno nvarchar(7) NOT NULL FOREIGN KEY REFERENCES student(sno), cno nvarchar(3) NOT NULL FOREIGN KEY REFERENCES course(cno), grade decimal(4,1) NOT NULL CHECK ( grade>0), CONSTRAINT c1 PRIMARY KEY (sno,cno) ) 创建(定义)标示符 引用标示符 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 T-SQL语言规定了两类标识符: 常规标识符 分隔标识符 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 1. 常规标识符 例如上例中的表的标识符sc。 常规标识符格式规则: (1)第一个字符必须是下列字符之一: Unicode标准3.2所定义的字母,包括拉丁字符a-z和A-Z,以及来自其他语言的字母字符。 下划线(_)、at符号(@)或数字符号(#)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 1. 常规标识符 特别要注意的是,在SQL Server中,某些位于标识符开头位置的符号具有特殊意义。 以一个at符号(@)开头的常规标识符始终表示局部变量或参数,并且不能用作任何其他类型的对象的名称。 以一个数字符号(#)开头的标识符表示临时表或过程。以两个数字符号(##)开头的标识符表示全局临时对象。建议其他类型对象名的开头不要用数字符号或两个数字符号字符。 某些Transact-SQL函数的名称以两个at符号(@@)开头。全局变量也是以两个at符号(@@)开头的。为了避免混淆,一般不应使用以@@开头的名称。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 1. 常规标识符 (2)后续字符(从第2个字符开始)可以包括: 如Unicode标准3.2中所定义的字母。 基本拉丁字符或其他国家/地区字符中的十进制数字。 at符号、美元符号($)、数字符号或下划线。 (3)标识符一定不能是Transact-SQL保留字。SQL Server可以保留大写形式和小写形式的保留字。 (4)不允许嵌入空格或其他特殊字符。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 1. 常规标识符 (5)不允许使用增补字符。 (6)变量名称和存储过程参数名称必须符合常规标识符的规则。 (7)常规标识符包含的字符数必须在1到128之间。对于本地临时表,标识符最多可以有116个字符。 (8)标识符中字母大小写等价。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 2. 分隔标识符 例如在下面的SELECT语句中表的标示符My Table有空格,不是常规标示符,所以用方括号括起来。 SELECT * FROM [My Table] WHERE [order] = 10 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 2. 分隔标识符 单引号只用于包含字符串,不能用于分隔标识符。 但是,如果QUOTED_IDENTIFIER设为OFF,对于单引号和双引号的用法,SQL Server遵循以下规则: (1)引号不能用于分隔标识符,而必须将括号用作分隔符。 (2)单引号或双引号可用于包含字符串。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.3 T-SQL的标识符 2. 分隔标识符 常规标识符可以使用分隔符,也可以不使用分隔符。 不符合常规标识符格式规则的标识符必须使用分隔符。分隔符仅用于标识符。分隔符不能用于关键字(保留字)。 分隔标识符的格式规则要求如下: (1)带分隔符的标识符可以包含的字符数与常规标识符相同,即可以包含1到128个字符,但不包括分隔符字符。本地临时表标识符最多可以包含116个字符。 (2)标识符的主体可以包含当前代码页内字符(分隔符本身除外)的任意组合。 例如,带分隔符的标识符可以包含空格、对常规标识符有效的任何字符以及表2-3中的任一字符。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 代字号 ~ 连字符 - 惊叹号 ! 左括号 { 百分号 % 右括号 } 插入号 ^ 撇号 ' “与”符号 & 句点 . 左圆括号 ( 反斜杠 \ 右圆括号 ) 重音符号 ` 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 数据类型即数据形式,就是数据的存储形式和操作使用方式。 数据类型用于指定对象可保存的数据的类型:如整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等。 在SQL Server中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。 SQL Server 2005提供了7类共29种系统数据类型,同时还允许用户基于系统提供的数据类型使用Transact-SQL或Microsoft.NET Framework定义自己的数据类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 SQL Server 2005提供的7大类系统数据类型为:精确数字类、近似数字类、Unicode字符串类、二进制字符串类、字符串类、日期和时间类以及其他数据类型。(var--variable) 精确数字类包含bigint、int、smallint、tinyint、money、smallmoney、decimal、numeric、bit等9种数据类型。 近似数字类包括float和real等2种数据类型。 日期和时间类包括datetime、smalldatetime等2种数据类型。 字符类包括char、text、varchar等3种数据类型。 Unicode字符串类包括nchar、ntext、nvarchar等3种数据类型。 二进制字符串binary、image、varbinary等3种数据类型。 其他数据类型包括cursor、timestamp、sql_variant、uniqueidentifier、table、xml等6种数据类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 在SQL Server 2005中,根据其存储特征,某些数据类型被指定为属于下列各组: 大值数据类型:varchar(max)、nvarchar(max)和varbinary(max) 大型对象数据类型:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)和xml 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 一般,两个相同类型的数据进行运算。 当两个具有不同数据类型的表达式通过运算符进行组合时,结果的特征遵循以下原则: 结果的数据类型是通过将数据类型的优先顺序规则应用到输入表达式的数据类型来确定的。 有关详细信息,请参阅数据类型优先级(T-SQL)。 结果数据类型为char、varchar、text、nchar、nvarchar或ntext时,结果的排序规则由排序规则的优先顺序规则确定。 结果的精度、小数位数及长度取决于输入表达式的精度、小数位数及长度。 SQL Server 2005提供了数据类型同义词以保持SQL-92兼容性。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 1. 整型数据类型 整型数据类型用于表示整数的数据。 使用整数数据的精确数字数据类型包括: bigint、 int、 smallint、 tinyint、 bit。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-4 整型数据类型的数据特征 表2-4给出了不同类型整型数据的取值范围及所占存储字节数。 bigint -2^63(-9,223,372,036,854,775,808)到2^63-1(9,223,372,036,854,775,807) 8字节 (固定长度) int -2^31(-2,147,483,648)到2^31-1(2,147,483,647) 4字节 smallint -2^15(-32,768)到2^15-1(32,767) 2字节 tinyint 0到255 1字节 bit 可以取值为1、0或NULL的整数数据类型 * 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 1. 整型数据类型 bit是一种严格的数字类型,但是从编程人员的观点,它更多的是一种“其他”类型,因为它最通常被用于表示布尔值。 SQL Server也允许使用True和False分别作为表示1和0的符号。字符串值 TRUE 和 FALSE 可以转换为以下 bit 值:TRUE 转换为 1,FALSE 转换为 0。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 2. 货币数据类型 货币数据类型专门用于处理货币,由整数部分和小数部分组成。 SQL Server提供了两种货币类型: Money smallmoney 货币数据类型数据最多可以包含4位小数,即精确到货币的万分之一。若数据的小数位超过4位,会自动进行四舍五入。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 数据类型 取值范围 存储 money 表2-5给出了两种货币类型数据的取值范围及所占存储字节数。 表2-5 货币数据类型的数据特征 数据类型 取值范围 存储 money -922,337,203,685,477.5808到922,337,203,685,477.5807 8字节 (固定长度) smallmoney -214,748.3648到214,748.3647 4字节 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 3. 精确小数数据类型 精确小数数据类型的数据是带固定精度和小数位数的数值。包括两种类型: Decimal numeric 精确小数数据类型的数据在定义时需要确定精度和小数位数,其格式如下: decimal[(p[,s])]和numeric[(p[,s])] 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 3. 精确小数数据类型 其中p代表精度,最多可以存储十进制数字整数部分和小数部分的总位数,但不包括小数点。 该精度必须是1到38之间的值。默认精度为18。 s代表小数位数,默认小数位数为0。 仅在指定精度后才可以指定小数位数,因此,0<=s<=p。 例如:decimal、decimal(10)、numeric(10,2) 精确小数数据类型的数据最大存储大小基于精度而变化,见表2-6。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 3. 精确小数数据类型 精度 存储字节数 1-9 5 10-19 20-28 13 29-38 17 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 4. 近似数数据类型 近似数数据类型是用于表示浮点数值数据的大值(或小值)数值数据类型。包括两种: Float real 浮点数值数据即用科学记数法表示数据,能够存储范围更大的数值数据,但有时不能精确存储。因为浮点型数据的精度不能自行设置,若超出了精度范围,能够存储,但有误差。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 4. 近似小数数据类型 float类型的数据在定义时需要确定其尾数,其语法格式为: float[(n)] 其中n为用于存储float数值尾数的位数,以科学记数法表示,因此可以确定精度和存储大小(表2-8)。 n必须是介于1和53之间的某个值。n的默认值为53。 例如:float、float(6) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 4. 近似小数数据类型 数据类型 范围 存储 float 表2-7 近似小数数据类型的数据特征 数据类型 范围 存储 float -1.79E+308至-2.23E-308、0以及2.23E-308至1.79E+308 取决于n的值, n为1-24时4字节; n为25-53时8字节 real -3.40E+38至-1.18E-38、0以及1.18E-38至3.40E+38 4字节 (固定长度) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 5. 日期和时间数据类型 日期和时间数据类型是用于表示某天的日期和时间数据的类型,包括两种类型: Datetime smalldatetime 日期时间型数据的默认显示格式“年-月-日 小时:分钟:秒”。 输入日期和时间数据类型的数据时,若略日期,则默认为当前日期;若省略时间,默认为0:00:00。 输入日期时,年、月、日之间除了使用“-”作为分隔符,还可用“/”或“.”分开。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 5. 日期和时间数据类型 SQL Server 2005用两个4字节(8字节)的整数内部存储datetime数据类型的值。 第一个4字节存储“基础日期”(即1900年1月1日)之前或之后的天数。基础日期是系统参照日期。 另外一个4字节存储天的时间,以午夜后经过的1/300秒数表示。 smalldatetime数据精确度低于datetime的。数据库引擎将smalldatetime值存储为两个2字节(4字节)的整数。 第一个2字节存储1900年1月1日后的天数。 另外一个2字节存储午夜后经过的分钟数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 5. 日期和时间数据类型 数据类型 范围 精确度 表2-9 日期和时间数据类型数据的取值范围和精确度 数据类型 范围 精确度 datetime 1753年1月1日到9999年12月31日 3.33毫秒 smalldatetime 1900年1月1日到2079年6月6日 1分钟 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 6. 字符串数据类型 字符串数据类型是用于表示字符串数据的。 (char– character) 字符串数据类型包括3类: Unicode字符串数据类型 非Unicode字符串数据类型 二进制字符串数据类型 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (1)非Unicode字符串数据类型 char varchar text 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (1)非Unicode字符串数据类型 ①char类型 char类型的数据是固定长度的非Unicode字符数据,长度为n个字节。 char类型数据的长度n是在数据定义时确定的,其语法格式为: char[(n)] n的取值范围为1至8000,存储大小是n个字节(每个字符占一个字节)。 未指定n,则默认为1。 例如:char、char(12) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (1)非Unicode字符串数据类型 ②varchar类型 varchar类型的数据是可变长度的非Unicode字符数据。其语法格式为: varchar[(n|max)] n的取值范围为1至8000,max指示最大存储大小是2^31-1个字节。 存储大小是输入数据的实际长度加2个字节。 输入数据的长度可以为0个字符。 如果在数据定义或变量声明语句中未指定n,则默认为1。如果在使用CAST和CONVERT函数(数据类型转换函数)时未指定n,则默认长度为30。例如:varchar、varchar(18) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (1)非Unicode字符串数据类型 如果使用char或varchar,建议执行以下操作: 如果列数据项的大小一致,则使用char。 如果列数据项的大小差异相当大,则使用varchar。 如果列数据项大小相差很大,而且大小可能超过8,000字节,请使用varchar(max)。 当排序规则代码页使用双字节字符时,存储大小仍然为n个字节。根据字符串的不同,n个字节的存储大小可能小于n个字符。 如果站点支持多语言,请考虑使用Unicode的nchar或nvarchar数据类型,以最大限度地消除字符转换问题。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (1)非Unicode字符串数据类型 ③text类型 text数据类型是专门用于存放大量字符的可变长度字符数据。当需要存储大于8000字节的字符串时,使用text数据类型。 text数据类型的数据最大长度为2^31-1(2,147,483,647)个字符,大约为2GB。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (2)Unicode字符串数据类型 Unicode字符串数据类型是使用UNICODE UCS-2字符集表示字符串数据,也称为双字节字符串数据类型,即使用两个字节存储一个字符。 Unicode数据类型解决了字符转换问题和针对不同国家安装多国代码问题,从而使得多种语言的数据存储变得更加容易。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (2)Unicode字符串数据类型 SQL Server 2005的Unicode字符串数据类型有3种: nchar nvarchar ntext 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (2)Unicode字符串数据类型 ① nchar 类型 nchar类型的数据是固定长度的Unicode字符串数据,nchar类型数据所含字符个数n是在数据定义时确定的。其语法格式为: nchar[(n)] n值必须在1到4,000之间(含)。存储大小为两倍n字节。 未指定 n,则默认长度为 1。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (2)Unicode字符串数据类型 ② nvarchar类型 nvarchar类型的数据是可变长度的Unicode字符串数据。其语法格式为: nvarchar[(n|max)] n值在1到4,000之间(含)。max指示最大存储大小为2^31-1字节。 存储大小是所输入字符个数的两倍+2个字节。 所输入数据的长度可以为0个字符。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (2)Unicode字符串数据类型 ③ ntext类型 ntext类型的数据是长度可变的Unicode数据,最大长度为2^30-1(1,073,741,823)个字符,约2GB。 存储大小是所输入字符个数的两倍(以字节为单位)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (3)二进制字符串数据类型 二进制字符串数据类型是用十六进制表示的字符串数据,有3种类型: binary varbinary image 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 binary[(n)] (3)二进制字符串数据类型 binary类型用于表示长度为n字节的固定长度二进制字符串数据,长度n在数据定义时确定。其语法格式为: binary[(n)] 其中n是从1到8,000的值。存储大小为n字节。 如果在数据定义或变量声明语句中未指定n,则默认长度为1。如果未使用CAST函数指定n,则默认长度为30。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (3)二进制字符串数据类型 ② varbinary类型 varbinary[(n|max)] n可以取从1到8,000的值。max指示最大的存储大小为2^31-1字节。 存储大小为所输入数据的实际长度+2个字节。 所输入数据的长度可以是0字节。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (3)二进制字符串数据类型 ③ image类型 在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。 例如,应用程序可以使用 BMP、TIEF、GIF 和 JPEG 格式等等,把数据存储在 Image 数据类型中。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 (3)二进制字符串数据类型 binary 和 varbinary 数据类型存储位串。 尽管字符数据是根据 Microsoft SQL Server 2005 代码页进行解释的,但 binary 和 varbinary 数据仅是位流。 如果列数据项的大小一致,则使用binary。 如果列数据项的大小差异相当大,则使用varbinary。 当列数据条目超出8,000字节时,请使用varbinary(max)。 图片、office文档等文件数据,用image。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 7. 其他数据类型(略) ① Cursor数据类型 这是变量或存储过程OUTPUT参数的一种数据类型,这些参数包含对游标的引用。使用cursor数据类型创建的变量可以为空。 ② Table数据类型 Table数据类型是一种特殊的数据类型,用于存储结果集以进行后续处理。table主要用于临时存储一组作为表值函数的结果集返回的行。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 7. 其他数据类型 ③ Timestamp数据类型 Timestamp数据类型公开数据库中自动生成的唯一二进制数字的数据类型。timestamp通常用作给表行加版本戳的机制。存储大小为8个字节。 timestamp数据类型只是递增的数字,不保留日期或时间。若要记录日期或时间,请使用datetime数据类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.4 T-SQL的数据类型 7. 其他数据类型 ④ Xml数据类型 使用xml数据类型,可以将XML文档和片段存储在SQL Server数据库中。XML片段是缺少单个顶级元素的XML实例。 可以创建xml类型的列和变量,并在其中存储XML实例。 注意,存储的xml数据类型表示实例大小不能超过2GB。 注:XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 常量也称为文字值或标量值,是表示一个特定数据值的符号。在整个操作过程中常量的值和表现形式保持不变。 常量的格式取决于它所表示的值的数据类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 常量按其所表示的值的数据类型,分为: 非Unicode字符串常量、 Unicode字符串常量、 二进制常量、 bit常量、 datetime常量、 integer常量、 decimal常量、 float和real常量、 money常量、 uniqueidentifier常量 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (1)非Unicode字符串常量 非Unicode字符串常量是用单引号括起来包含字母数字字符(a-z、A-Z和0-9)以及特殊字符(如感叹号(!)、at符(@)和数字号(#))的字符串。 SQL Server 2005数据库引擎将为字符串常量分配当前数据库的默认排序规则,除非使用COLLATE子句为其指定了排序规则。 如果已为某个连接将QUOTED_IDENTIFIER选项设置成OFF,则字符串也可以使用双引号括起来,但Microsoft SQL本机客户端提供程序和ODBC驱动程序将自动使用 SET QUOTED_IDENTIFIER ON SQL Server 2005建议使用单引号。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (1)非Unicode字符串常量 例如: 'Manegment'、 'These goods will be sold at a discount of 10%.'、 'The level for job_id: %d should be between %d and %d. ' 都是非Unicode字符串常量。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (1)非Unicode字符串常量 如果单引号中的字符串包含一个嵌入的单引号,可以使用两个单引号表示嵌入的单引号。对于嵌入在双引号中的字符串则没有必要这样做。 例如: 'I''m a techer. '(注:''为两个单引号,不是双引号)、 " I'm a techer. " 都是非Unicode字符串常量。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (1)非Unicode字符串常量 非Unicode字符串中包含字符的个数(不包括单引号)称为字符串的长度。 空字符串用中间没有任何字符的两个单引号表示(即'' ),其长度为0。 空格字符串是由空格组成,如' '由4个空格组成的,其长度为4。 大于8000字节的字符常量为varchar(max)类型的数据。 一个字符串的任一连续部分称为该字符串的子串。 字符串自身也是自己的一个子串。 例如:对于字符串' abc ' , ' a ' 、 ' b ' 、 ' c ' 、 ' ab ' 、 ' bc ' 、 ' abc '都是它的子串, ' ac '不是。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (2)Unicode字符串 Unicode字符串的格式与普通字符串相似,但它前面有一个N标识符(N代表SQL-92标准中的区域语言)。N前缀必须是大写字母。 例如,‘China’是字符串常量,而N‘China’则是Unicode常量。Unicode字符串常量被解释为Unicode数据。 Unicode常量有排序规则。该排序规则主要用于控制比较和如何区分大小写。 存储Unicode数据时每个字符使用2个字节,而不是每个字符1个字节。 大于8000字节的Unicode常量为nvarchar(max)类型的数据。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (3)二进制常量(略) 二进制常量以 0x(一个零和小写字母 x)开始,后跟位模式的十六进制表示形式。 这些常量不使用引号括起来。 例如,0xAE、0x12Ef、0x69048AEFDD010E、0x(注:空字符串) 都是二进制字符串常量。 例如,0x2A 表示十六进制值 2A,它等于十进制值 42 或单字节位模式 00101010。 存储十六进制值 [如安全标识号 (SID)、GUID(使用 uniqueidentifier 数据类型)]或可用十六进制方式存储的复杂数字时,使用二进制数据。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (4)bit常量 如果使用一个大于1的数字,则该数字将转换为1。 例如 declare @a bit set @a=2 print @a 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (5)datetime常量 SQL Server 可识别下列格式中用单引号 (‘) 括起来的日期和时间: ①字母日期,例如'September 17, 2009'; ②数值日期格式,例如'9/17/2009'(注:年、月、日可用“-”或“/”或“.”分隔); ③未分隔的字符串格式,例如 '20090917'指2009年9月17日; ④'17:29:38'、'05:29 PM'都是时间常量。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (5)datetime常量 例如: Print ‘Shandong University’ Print N‘Shandong University’ declare @a datetime set @a='2010/03/22' print @a 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (6)integer常量 integer常量必须全部为数字及正负号,不能包含小数。例如,1357、0、19等都是integer常量。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (7)decimal常量 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (8)float和real常量 例如,101.5E5、0.5E-2都是float或real常量,表示的数值为101.5×105、0.5×10-2。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (9)money常量 money常量以前缀为可选的小数点和可选的货币符号的数字字符串来表示,money常量不使用引号括起来。 例如,$135、$286.79都是money常量。 SQL Server 2005不强制采用任何种类的分组规则,例如在代表货币的字符串中每隔三个数字插入一个逗号(,)。在指定的money文字中,将忽略任何位置的逗号。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 (10)uniqueidentifier常量(略) uniqueidentifier常量是表示GUID的字符串。可以使用字符或二进制字符串格式指定。 GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。 从 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式的字符串常量转换,其中,每个 x 是一个在 0-9 或 a-f 范围内的十六进制数字. ‘6F9619FF-8B86-D011-B42D-00C04FC964FF‘是一个有效的GUID值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 1. 常量 应用+或-一元运算符。这将创建一个表示有符号数字值的表达式。如果没有应用+或-一元运算符,数值常量将使用正数。 例如, +1357、-2468是有符号integer表达式; +123.567、-256.789是有符号decimal表达式、 +123E-3、-12E5是有符号float表达式; -$15.56、+$3456.78是有符号money表达式。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 变量是在程序运行或操作过程中可以改变其值的量。 变量相当于一个容器,常用于保存程序中输入的数据、中间结果和输出的数据等。 确定一个变量,需要确定其三个要素: 变量名 数据类型 变量值 在操作或程序运行过程中使用变量,就是使用变量存储的当前值。 变量可参与运算或作为参数等。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 Transact-SQL语言中有两种形式的变量: 一种是用户自己定义的局部变量 另一种是系统提供的全局变量 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 T-SQL局部变量是用户定义的变量,可以保存单个特定类型数据值的对象,它的作用范围仅限制在程序内部。 局部变量名(标识符)必须是以一个“@”符号开头的,而且必须先用DECLARE语句定义后才可以使用。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 参数说明: 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 ① 局部变量的定义 局部变量是通过DECLARE语句定义的。DECLAER语句的语法格式为: DECLARE {@local_variable data_type} [,…n] 参数说明: 参数@local_variable:用于指定局部变量的名称,变量名必须以符号@开头,并且必须符合SQL Server的标识符命名规则。 参数data_type:用于设置局部变量的数据类型及其大小(长度)。 data_type可以是任何由系统提供的或用户定义的数据类型。但是,局部变量不能是 text、ntext 或 image 数据类型。对于数值型变量还指定精度和小数位数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 ① 局部变量的定义 若要同时定义多个局部变量,则在前一个局部变量后使用一个逗号,再指定下一个局部变量名称和数据类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 例如,使用DECLARE 语句创建名为@sno的int 数据类型的局部变量,声明如下: DECLARE @sno int; 使用DECLARE 语句创建了三个名为 @tno、@tname和 @dept 的局部变量,其数据类型分别为nchar(10)、nvarchar(20)、nvarchar(30)。变量声明如下: DECLARE @tno nchar(10), @tname nvarchar(20), @dept nvarchar(30); 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 ② 局部变量的赋值 使用DECLARE命令定义了局部变量之后,会将每个变量都初始化为NULL值。 如果要改变局部变量的值,必须使用SELECT命令或者SET命令。其语法形式为: SET @local_variable = expression 或者 SELECT @local_variable = expression [ , @local_variable2 = expression2[,...] ] 参数@local_variable:是给其赋值并声明的局部变量; 参数expression:是任何有效的SQL Server表达式。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 ② 局部变量的赋值 例如: SET @tno=N’012567’ SELECT @tname=N’Zhang Hua’,@tdept=N’School of Management’ Select @tno as 学号,@tname as 姓名,@tdept as 所在学院 注意:一个SET语句能给一个局部变量赋值,而一个 SELECT 语句可以为多个局部变量赋值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 ② 局部变量的赋值 例如: DECLARE @a int ; SET @a=10 Print @a SELECT @a=@a+2 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (1)局部变量 ③ 局部变量的作用域 局部变量的引用若超出其作用域,则将会出错。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (2)全局变量 全局变量是由SQL Server系统提供并赋值的变量,其作用范围是任何程序均可随时调用。 全局变量通常存储一些SQL Server的配置设定值和统计数据,用户可以在程序中用全局变量来测试系统的设定值或者是T-SQL命令执行后的状态值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.5 T-SQL中的常量与变量 2. 变量 (2)全局变量 引用全局变量时,必须以标记符“@@”开头。 局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。 表2-10给出常用全局变量的名称和所对应的状态值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-10 常用全局变量的名称和所对应的状态值 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-10 常用全局变量的名称和所对应的状态值 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 例如: Print @@langid Print @@language Print @@max_connections Print @@servername 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 使用运算符可以执行算术运算、数据的比较、字符串串联或赋值等数据加工处理操作。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 在 Microsoft SQL Server 2005 中,使用运算符可以执行下列操作: ①永久或临时更改数据; ②搜索满足指定条件的行或列; ③在数据列之间或表达式之间进行判断; ④在开始或提交事务之前,或者在执行特定代码行之前测试指定条件。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 SQL Server 2005所使用的运算符有7类,分别是: 算术运算符、 一元运算符、 赋值运算符、 字符串串联运算符、 比较运算符、 逻辑运算符、 按位运算符。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 一元运算符是对一个操作数执行运算操作,包括数值型数据的+(取正)、-(取负)以及NOT(逻辑非)、~(位取反)。 NOT(逻辑非)将在逻辑运算符中介绍 ~(位取反)将放在位运算符中介绍 数值型数据的+(取正)、-(取负)运算符将不介绍 表2-11给出T-SQL各运算符实现的操作。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-11 T-SQL运算符及其执行操作 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 表达式是由符号和运算符的一种有效组合,即由标识符、常量、变量、函数、子查询、运算符等的有效组合,SQL Server 2005 数据库引擎将处理该组合以获得单个数据值。 T-SQL表达式可以分为简单表达式和复杂表达式两种类型。 简单表达式一般含有一个运算符,也可以是单独的一个常量、变量、列或标量函数。 复杂表达式由两个或更多的简单表达式经运算符合并而成。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 在复杂表达式中,运算符将根据 SQL Server 运算符优先级定义按顺序进行计算。优先级较高的运算符先于优先级较低的运算符计算。 复杂表达式结果的数据类型取决于运算符规则与数据类型优先级规则的组合方式。 如果结果是一个字符或 Unicode 值,则结果的排序规则取决于运算符规则与优先排序规则的组合方式。 另外,还有一些规则用于根据简单表达式的精度、小数位数和长度确定结果的精度、小数位数和长度。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 1. 算术运算符及表达式 算术运算符是用于对两个数值型数据执行运算的运算符。算术运算符有+(加)、-(减)、*(乘)、/(除)和%(取余)。 算术运算符的操作对象是数值型数据,其运算结果也是数值类型数据。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 1. 算术运算符及表达式 算术运算符运算的优先级为先*(乘)、/(除)、%(取余)后+(加)、-(减)。 算术表达式是用算术运算符和括号将数值型常量、其值是数值型的变量和函数等数值型运算对象连接起来且符合语法规则的式子。 例如: Declare @x int Set @x=10 Print @x*3+27 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 2. 赋值运算符及表达式 赋值运算符用于将数据值指派给特定的对象,例如给局部变量赋值。另外,还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。 T-SQL 中只有一个赋值运算符,即=(赋值号)。 赋值表达式是由赋值运算符将一个对象标识符(对象名)和一个表达式连接起来的式子。 赋值表达式在更具体操作时,先计算表达式的值,再将表达式的值赋给指定的对象。 其基本格式为: <对象名> = <表达式> 在上面各例题中,SET或SELECT语句中给局部变量赋值用到了=(赋值号)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 3. 字符串连接运算符及表达式 字符串连接运算符用于将两个字符串首尾相接,得到一个新字符串。 字符串连接运算符只有一个,即+(连接运算)。 参与字符串连接运算的数据只能是字符数据类型,其运算结果也是字符数据类型。 字符串表达式是用字符串连接运算符和括号将字符型常量、其值是字符型的变量和函数等字符型运算对象连接起来且符合语法规则的式子。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 3. 字符串连接运算符及表达式 【例2-1】 字符串连接运算 DECLARE @tno nchar(10), @tname nvarchar(20), @dept nvarchar(30); SELECT @tno=N’012567’,@tname=N’Zhang Hua’,@tdept=N’Management’; PRINT ‘No.: ‘+@tno PRINT ‘Name: ‘+@tname PRINT ‘Deptment: ‘+@tdept+’ School’ 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 4. 比较运算符及表达式 比较运算符也称为关系运算符,用于比较两个相同(或相近)数据类型表达式的大小是否符合比较运算符所指定的比较关系。 比较运算结果是逻辑值,有三种: TRUE(真,满足比较关系)、 FALSE(假,不满足比较关系) UNKNOWN(未知)(NULL表示空值,但不同于空白或零值,表示一种未知状态。与NULL的比较,其结果都是UNKNOWN)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 4. 比较运算符及表达式 比较运算符有8个,分别是: >(大于)、 >=(大于或等于)、 <(小于)、 <=(小于或等于)、 =(等于)、 <>或!=(不等于)、 !>(不大于,相当于小于或等于)、 !<(不小于,相当于大于或等于)。 除了 text、ntext 或 image 数据类型的表达式外,比较运算符可以用于所有的表达式。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 4. 比较运算符及表达式 比较表达式使用一个比较运算符将两个相同(或相近)数据类型的常量、变量或函数等数据对象连接起来且符合语法规则的有效式子。 比较表达式一般用于if、while等语句的简单条件以及where、having等子语句的简单条件。 例如: select sno from student.dbo.sc where grade>=80 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 5. 逻辑运算符及表达式 逻辑运算符用于把多个比较表达式或逻辑表达式连接起来,对某个复杂条件进行测试。 逻辑运算符和比较运算符一样,其运算结果是逻辑值: TRUE(真,满足逻辑条件)、 FALSE(假,不满足逻辑条件) UNKNOWN(未知)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 5. 逻辑运算符及表达式 逻辑运算符主要包括三个: NOT(逻辑非) AND(逻辑与) OR(逻辑或) 其运算的优先顺序从高到底为NOT(逻辑非)→AND(逻辑与)→OR(逻辑或)。 表2-12给出逻辑运算符的真值表,表中a和b 分别代表不同逻辑运算量。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 5. 逻辑运算符及表达式 表2-12 逻辑运算真值表 a NOT a TRUE FLASE a b a AND b TRUE FLASE a b a OR b TRUE FLASE 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 5. 逻辑运算符及表达式 逻辑表达式是逻辑运算符和括号把多个比较表达式或逻辑表达式连接起来且符合语法规则的有效式子。 逻辑表达式一般用于if、while等语句的复杂条件以及where、having等子语句的复杂条件。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 6. 位运算符及表达式 位运算符用于在整型数据或者二进制数据(image 数据类型除外)之间按照二进制位进行运算操作,在位运算符左右两侧的操作数不能同时是二进制数据。 位运算的结果是整数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 6. 位运算符及表达式 位运算符包括~(位取反)、&(位与)、^(位异或)、|(位或)等运算符,其运算的优先顺序从高到底是~ → & → ^ → | 。 位运算表达式是用位运算符和括号将整型数据或二进制数据连接起来且符合语法规则的有效式子。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 例如: 6. 位运算符及表达式 例如: 170 的二进制表示为 0000 0000 1010 1010 75 的二进制表示为 0000 0000 0100 1011 在这两个值之间执行按位 AND 运算所产生的二进制结果是 0000 0000 0000 1010,即十进制数 10。 (A & B) 0000 0000 1010 1010 0000 0000 0100 1011 ------------------- 0000 0000 0000 1010 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 6. 位运算符及表达式 例如: 170 的二进制表示为 0000 0000 1010 1010 75 的二进制表示为 0000 0000 0100 1011 在这两个值之间执行按位互斥 OR 运算(只有0和1、1和0运算为1,而0和0、1和1运算为0)所产生的二进制结果是 0000 0000 1110 0001,即十进制数 225。 (A ^ B) 0000 0000 1010 1010 0000 0000 0100 1011 ------------------- 0000 0000 1110 0001 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 6. 位运算符及表达式 例如: 170 的二进制表示为 0000 0000 1010 1010 75 的二进制表示为 0000 0000 0100 1011 在这两个值之间执行按位 OR 运算所产生的二进制结果是 0000 0000 1110 1011,即十进制数 235。 (A | B) 0000 0000 1010 1010 0000 0000 0100 1011 ------------------- 0000 0000 1110 1011 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.6 T-SQL的运算符及表达式 7. 各种运算符的优先级别 当一个复杂的表达式有多个运算符时,运算符优先级决定该表达式执行运算的先后次序,最终得到运算结果。 表达式运算执行的顺序直接影响到最终的结果,因此,必须熟悉运算符的优先级别,正确地表述表达式。 运算符的优先级别见表2-14所示。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 7. 各种运算符的优先级别 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 使用函数可提高软件开发效率和程序运行效率。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 T-SQL函数可用于或包括在: 任意表达式中; 使用SELECT语句的查询的选择列表中,以返回一个值; SELECT或数据修改(SELECT、INSERT、DELETE或UPDATE)语句的WHERE子句搜索条件中,以限制符合查询条件的行; 视图的搜索条件(WHERE子句)中,以使视图在运行时与用户或环境动态地保持一致; CHECK约束或触发器中,以在插入数据时查找指定的值; DEFAULT约束或触发器中,以在INSERT语句未指定值的情况下提供一个值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 参数说明 参数可以是字段引用、数字、文本和逻辑值(如 TRUE 或 FALSE)。 参数也可以是常量、变量、表达式或其他函数(即函数嵌套)。 函数中所用参数必须生成该参数的有效值。 指定函数时应始终带上括号,即使没有参数必如此。 但是,与DEFAULT关键字一起使用的niladic函数例外。 有时,用来指定数据库、计算机、登录名或数据库用户的参数是可选的。 如果未指定这些参数,则默认将这些参数赋值为当前的数据库、主机、登录名或数据库用户。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 在使用函数时,一定要注意几点: ①正确使用函数名及函数的调用格式; ②保证各参数的数据类型与要求一致; ③各参数的顺序要正确; ④熟知函数值的数据类型。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 T-SQL函数包括系统内部函数和用户定义函数。 SQL Server 2005数据库提供了许多系统内置函数供用户直接使用,同时也允许用户编写自定义函数,以方便处理流程的实现或处理流程的重用使用。 本节仅介绍一些常用的系统内部函数,其他系统内部函数请查询“SQL Server 2005联机丛书”。 用户自定义函数的编写将在第5章介绍。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-15 SQL Server 2005函数的类别 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 在SQL Server 2005中,函数可分为严格确定、确定和非确定三类。 如果对于一组特定的输入值,函数始终返回相同的结果,则该函数就是严格确定的。 对于用户定义的函数,判断其是否确定的标准相对宽松。如果对于一组特定的输入值和数据库状态,函数始终返回相同的结果,则该用户定义的函数就是确定的。 使用同一组输入值重复调用非确定性函数,返回的结果可能会不同。例如,函数GETDATE()是非确定的。SQL Server对各种类型的非确定性函数进行了限制。因此,应慎用非确定性函数。 Print getdate() 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 聚合函数对一组值执行计算,并返回单个值。 所有聚合函数均为确定性函数。 除了COUNT以外,聚合函数都会忽略空值。 表2-16给出常用的聚合函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
略 2.2 Transact-SQL语言基础 表2-16给出常用的聚合函数。 函数语法格式 函数功能 AVG([ALL|DISTINCT] expression) 返回组中值的平均值。空值将被忽略 COUNT([ALL|DISTINCT] expression) 返回组中项目的数量 COUNT_BIG([ALL|DISTINCT] expression) 返回组中的项数。COUNT_BIG的用法与COUNT函数类似。两个函数唯一的差别是它们的返回值。COUNT_BIG始终返回bigint数据类型值。COUNT始终返回int数据类型值 MAX([ALL|DISTINCT] expression) 返回组中值的最大值 MIN([ALL|DISTINCT] expression) 返回组中值的最小值 SUM([ALL|DISTINCT] expression) 返回表达式中所有值的和,或只返回DISTINCT值。SUM只能用于数字列。空值将被忽略 STDEV([ALL|DISTINCT] expression) 返回指定表达式中所有值的标准偏差 STDEVP([ALL|DISTINCT] expression) 返回指定表达式中所有值的总体标准偏差 VAR([ALL|DISTINCT] expression) 返回指定表达式中所有值的方差 VARP([ALL|DISTINCT] expression) 返回指定表达式中所有值的总体方差 略 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 在上述聚合函数中,参数说明: 若选用参数ALL,则表示对所有的值进行聚合函数运算。 若选用参数DISTINCT,则指定只在每个值的唯一实例上执行,而不管该值出现了多少次(即去掉重复值)。 [ALL|DISTINCT]省略,则默认为ALL。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 参数expression为常量、列或函数以及数字、位运算和字符串运算符的任意组合。 对于除COUNT和COUNT_BIG函数外,expression是精确数值或近似数值数据类别(bit数据类型除外)的表达式。 而对于COUNT和COUNT_BIG函数,expression可以是除text、image或ntext以外任何类型的表达式。但不允许使用聚合函数和子查询。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 例: 1. 聚合函数 select cno,avg(grade) from student.dbo.sc group by cno; select cno,count(cno) AS 被选次数 from student.dbo.sc 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 聚合函数只能在以下位置作为表达式使用: SELECT语句的选择列表(子查询或外部查询) COMPUTE或COMPUTE BY子句 HAVING子句 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 SELECT AVG(grade) AS c01课程的平均成绩, MAX(grade) AS c01课程的最高成绩, MIN(grade) AS c01课程的最低成绩 FROM sc WHERE cno='c01' 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 [例4-25]:查询信管系学生的学号、姓名和年龄,最后汇总出该系学生的总人数和平均年龄。 SELECT sno,sname,year(getdate( ))-year(sbirthday) as 年龄 FROM student WHERE sdept=N'信管系' COMPUTE COUNT(sno),AVG(year(getdate( ))-year(sbirthday)) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 1. 聚合函数 [例4-29]:统计被选过2次和2次以上的课程的课程号及被选过的次数。 SELECT cno,count(*) AS 被选次数 FROM student.dbo.sc GROUP BY cno HAVING COUNT(*)>=2 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 2. 数学函数 数学函数是执行三角、几何和其他算术运算的函数,通常基于参数提供的输入值执行计算,并返回一个数值。 表2-17给出常用的数学函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-17给出常用的数学函数。 函数语法格式 函数功能 ABS(numeric_expression) 返回给定numeric_expression表达式的绝对值 CEILING(numeric_expression) 返回大于或等于给定numeric_expression的最小整数 FLOOR(numeric_expression) 返回小于或等于给定numeric_expression的最大整数 EXP(float _expression) 返回给定float _expression表达式的自然指数(即以e为底的float _expression次方) LOG(float _expression) 返回给定float _expression表达式的自然对数 LOG10(float _expression) 返回给定float _expression表达式的以10为底的对数 PI() 返回圆周率常数 POWER(numeric_expression,y) 返回给定numeric_expression表达式的y次方 RAND([seed]) 返回0到1之间的随机float值,seed是给出种子值或起始值的整型表达式(tinyint、smallint或int) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-17给出常用的数学函数(续) 函数语法格式 函数功能 ROUND(numeric_expression, length [,function]) Length: numeric_expression 舍入到的精度。当 length 为正数时,numeric_expression 舍入到 length 所指定的小数位数。当 length 为负数时,将按照 length 所指定的数值,在小数点左侧对numeric_expression 进行舍入。 Function: 要执行的运算类型。当省略 function 或使用值 0(默认)时,将对 numeric_expression 进行舍入。当指定非 0 值时,将对 numeric_expression 进行截断。 SIGN(numeric_expression) 当给定numeric_expression表达式的值为正数、0或负数时该函数的返回值分别为1 (正数)、0 (零)或-1 (负数) SQRT(float _expression) 返回给定float_expression表达式的平方根 SQUARE(float_expression) 返回给定float_expression表达式的平方 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
略 2.2 Transact-SQL语言基础 表2-17给出常用的数学函数。 函数语法格式 函数功能 ACOS(float _expression) 返回给定float _expression表达式的反余弦 ASIN(float _expression) 返回给定float _expression表达式的反正弦 ATAN(float _expression) 返回给定float _expression表达式的反正切 ATN2(float _expression1, float _expression2) 返回以弧度表示的角,该角位于正X轴和原点至点(y,x)的射线之间,其中float _expression1(x)和float _expression2(y)是两个指定的浮点表达式的值 COS(float _expression) 返回给定float _expression表达式的余弦 COT(float _expression) 返回给定float _expression表达式的余切 DEGREES(numeric_expression) 将numeric_expression表示的弧度转换为度 RADIANS(numeric_expression) 将numeric_expression表示的度转换为弧度 SIN(float _expression) 返回给定float _expression表达式的正弦 TAN(float _expression) 返回给定float _expression表达式的正切 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 在上述数学函数中,参数说明: 给定的参数numeric_expression为精确数字或近似数字数据类型类别(bit 数据类型除外)的表达式; float_expression为 float 类型或能够隐式转换为 float 类型的表达式。 算术函数(例如ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS和SIGN)返回与输入值具有相同数据类型的值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 三角函数和其他函数(包括EXP、LOG、LOG10、SQUARE和SQRT)将输入值转换为float并返回float值。 除RAND以外的所有数学函数都为确定性函数。仅当指定种子参数时RAND才是确定性函数。 产生(a,b) 之间的随机数:rand()*(b-a)+a 例: SELECT SIGN(-2.6),SIGN(2) SELECT FLOOR(15.7),CEILING(15.7) SELECT ROUND(123.456,2),ROUND(123.456,2,1),ROUND(123.45,-1) SELECT RAND(),RAND(),RAND(1),RAND(1),rand(100-10)+10 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 3. 字符串函数 字符串函数是对字符串数据进行处理的函数,对字符串输入值执行操作,并返回字符串或数值。 表2-18 给出常用的字符串函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 select ascii(‘Shandong’),char(65); 函数语法格式 函数功能 函数值数据类型 ASCII(character_expression) 返回字符表达式首字符的ASCII代码值 int CHAR(integer_expression) 将int型ASCII代码值(介于0和255之间的整数)转换为相应的字符。如果该整数不在此范围内,将返回NULL值。该函数可用于将控制字符插入字符串中或输出 char(1) NCHAR(integer_expression) 根据Unicode标准所进行的定义,返回具有指定的整数代码的Unicode字符,integer_expression介于0与65535之间的正整数。如果指定了超出此范围的值,将返回NULL nchar(1) UNICODE(ncharacter_expression) 按照Unicode标准的定义,返回输入表达式的第一个字符的整数值 select ascii(‘Shandong’),char(65); print ‘Shandong’+’School Of Economics’ Print ‘Shandong’ +char(13)+’School Of Economics’ 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 declare @a varchar(20); 函数语法格式 函数功能 函数值数据类型 CHARINDEX(c_expression1, c_expression2[,start_location]) 返回字符串expression1在字符串expression2中出现的起始位置。expression1、expression2都属于字符串数据类型。start_location用于指定开始在 expression2 中搜索 expression1 时的字符位置.如果 start_location 未被指定、是一个负数或零,则将从 expression2 的开头开始搜索。start_location 可以是 bigint 类型。 如果expression2的数据类型为varchar(max)、nvarchar(max)或varbinary(max),则为bigint,否则为int。 LEN(string_expression) 返回给定字符串的字符个数,即字符串的长度,其中不包含尾随空格 若expression 的数据类型为 varchar(max)、nvarchar(max) 或 varbinary(max),则为 bigint;否则为 int declare @a varchar(20); set @a=‘Shandong University’; select charindex(’dong’, @a),len(@a) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 declare @a varchar(20); 函数语法格式 函数功能 函数值数据类型 LEFT(character_expression, integer_expression) 返回从字符串左边开始指定个数的字符,即取character_expression的左子串,integer_expression指定个数。 varchar 或nvarchar RIGHT(character_expression, 返回从字符串右边开始指定个数的字符,即取character_expression的右子串,integer_expression指定个数 SUBSTRING(expression,start,length) 返回字符、binary、text或image表达式的一部分,即取子串。start整数指定子字符串开始位置的。start可以为bigint类型。 length正整数指定要返回的expression的字符数或字节数。如果length为负,则会返回错误。必须以字符数指定使用ntext、char或varchar数据类型的偏移量(start和length)。必须以字节数指定使用text、image、binary或varbinary等数据类型的偏移量。 binary varbinary n varchar declare @a varchar(20); set @a=‘Shandong University’; select left(@a,8),right(@a,10), substring(@a,10,3); 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 declare @a varchar(20); 函数语法格式 函数功能 函数值数据类型 LTRIM(character_expression) 删除字符串的起始空格后返回字符串 varchar 或nvarchar RTRIM(character_expression) 删除字符串的尾随空格后返回字符串 declare @a varchar(20); set @a=‘ Shandong University ’; select len(@a),@a; select len(ltrim(@a)),ltrim(@a); select len(rtrim(@a)),rtrim(@a); 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 declare @a varchar(20); 函数语法格式 函数功能 函数值数据类型 REPLACE(string_expression1, string_expression2, string_expression3) 用string_expression3字符串替换string_expression1字符串中出现的所有string_expression2子字符串。如果任何一个参数为 NULL,则返回 NULL 若其中一个参数数据类型为nvarchar,则为nvarchar;否则 为varchar REPLICATE(string_expression, integer_expression) 返回以integer_expression)指定次数重复string_expression字符串所生成的字符串 与string_expression 的类型相同 REVERSE(character_expression) 返回character_expression字符串的逆向字符串 varchar 或nvarchar SPACE(integer_expression) 返回由重复的空格组成的字符串 char declare @a varchar(20); set @a=‘Shandong University’; select lower(@a),upper(@a),replicate(‘bye’,2)+’!’; select @a+space(5)+’School Of Economics’ select replace(@a,’Shandong’,’Beijing’) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 select str(231.567,8,2), str(231.567,5,2) 函数语法格式 函数功能 函数值数据类型 STR(float_expression [,length[,decimal]]) 返回由数字数据转换来的字符数据。参数float_expression是带小数点的近似数字(float)数据类型的表达式。length指定总长度,包括小数点、符号、数字或空格,默认值为10。Decimal指定小数位数,必须小于或等于 16。length和decimal必须是非负值。 char LOWER(character_expression) 将将字符串中所有大写字母转换为小写后返回字符串 varchar 或nvarchar UPPER(character_expression) 将将字符串中所有小写字母转换为大写后返回字符串 select str(231.567,8,2), str(231.567,5,2) select ‘ok!’+str(231.567,8,2) declare @a varchar(20); set @a=‘Shandong University’; select lower(@a),upper(@a) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 在上述字符串函数中,给定的参数character_expression、c_expression或 string_expression为字符或二进制数据表达式; integer_expression为整数,可以是bigint类型。 所有内置字符串函数都是具有确定性的函数。 例如: declare @a datetime set @a=substring('370121198707217826',7,8) SELECT @a,DATEDIFF(YY,@A,GETDATE()) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 4. 日期和时间函数 日期和时间函数是对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。 表2-19给出常用的日期和时间函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
datetime或smalldatetime 2.2 Transact-SQL语言基础 函数语法格式 函数功能 函数值数据类型 DATEADD(datepart,number,date) 在给指定日期date加上一个时间间隔number后新的datetime值。参数number为数值类型表达式,若为非整数值,则将舍弃该值小数部分 datetime或smalldatetime DATEDIFF(datepart,startdate,enddate) 返回跨两个指定日期的指定日期部分间隔数。参数datepart用于指定应在日期的哪一部分计算差额 int Declare @d datetime; set @d=getdate(); select dateadd(yy,2,@d),dateadd(q,2,@d); select datediff(d,@d,’2010/10/01’) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 Declare @d datetime; set @d=getdate(); 函数语法格式 函数功能 函数值数据类型 DATENAME(datepart, date) 返回表示指定日期的指定日期部分的字符串 nvarchar DATEPART(datepart, date) 返回代表指定日期的指定日期部分的整数,除了用作DATEPART(dw,date)或DATEPART(wk|ww,date)外都具有确定性。dw是weekday日期部分,取决于设置每周的第一天的SET DATEFIRST所设置的值。week日期部分(wk或ww)反映了对SET DATEFIRST所做的更改。任意一年的1月1日均定义week日期部分的开头数字,例如:DATEPART(wk,'Jan 1,xxxx')=1,其中xxxx为任意一年。 int Declare @d datetime; set @d=getdate(); select datename(yy,@d),datepart(yy,@d); select datename(dw,@d),datepart(dw,@d) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 Declare @d datetime; set @d=getdate(); select month(@d),year(@d) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 4. 日期和时间函数 在上述日期和时间函数中,参数date为datedatetime 或 smalldatetime 类型的表达式。 参数datepart用于指定要返回新日期的组成部分。 表2-20列出了Microsoft SQL Server 2005可识别的日期部分及其缩写。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-20列出了Microsoft SQL Server 2005可识别的日期部分及其缩写。 year yy, yyyy weekday dw, w quarter qq, q hour hh month mm, m minute mi, n dayofyear dy, y second ss, s day dd, d millisecond ms week wk, ww 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 5. 系统函数 系统函数对SQL Server 2005中系统级的值、对象和设置进行操作并返回有关信息。 表2-21给出常用的系统函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
略 2.2 Transact-SQL语言基础 表2-21给出常用的系统函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 数据类型的转换 数据类型的转换有隐式转换和显式转换。 隐式转换指那些没有指定 CAST 或 CONVERT 函数的转换。 显式转换指那些需要指定 CAST 或 CONVERT 函数的转换。 以下图例显示了可对 SQL Server 2005 系统提供的数据类型执行的所有显式和隐式数据类型转换。其中包括 xml、bigint 和 sql_variant。不存在对 sql_variant 数据类型的赋值进行的隐式转换,但是存在转换为 的隐式转换。 sql_variant数据类型,用于存储 SQL Server 2005 支持的各种数据类型(不包括 text、ntext、image、timestamp 和 sql_variant)的值。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-21给出常用的系统函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 CAST ( expression AS data_type [ (length ) ]) CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 参数 expression 任何有效的表达式。 data_type 作为目标的系统提供数据类型。这包括 xml、bigint 和 sql_variant。不能使用别名数据类型。 有关可用数据类型的详细信息,请参阅数据类型 (Transact-SQL)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 length nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。 对于 CONVERT,如果未指定 length,则默认为 30 个字符。 style 数据格式的样式,用于将 datetime 或 smalldatetime 数据转换成字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型),或将已知日期或时间格式的字符数据转换成 datetime 或 smalldatetime 数据;或者是字符串格式,用于将 float、real、money 或 smallmoney 数据转换成字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。 如果 style 为 NULL,则返回的结果也为 NULL。 有关style 值详细解释,请参阅联机丛书。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 例如: Print cast(12345 as varchar)+'abc' print CONVERT(datetime,'20070101',101) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 6. 游标函数(略) 游标函数可返回有关游标的信息。所有游标函数都是非确定性的。 表2-22常用的游标函数。 函数语法格式 函数功能 @@CURSOR_ROWS 返回连接上最后打开的游标中当前存在的合格行的数量。 @@FETCH_STATUS 返回被FETCH语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 2.2.7 T-SQL函数 7. 元数据函数(略) 元数据函数用于返回有关数据库和数据库对象的信息。所有元数据函数都具有不确定性。 表2-23常用的元数据函数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.2 Transact-SQL语言基础 表2-23常用的元数据函数 函数语法格式 函数功能 @@PROCID COL_LENGTH('table','column') 返回列的定义长度(以字节为单位) COL_NAME(table_id,column_id) 返回数据库列的名称,该列具有相应的表标识号和列标识号 DB_NAME(database_id) 返回数据库名 INDEX_COL('table',index_id,key_id) 返回索引列名称 OBJECT_ID('object') 返回数据库对象标识号 OBJECT_NAME(object_id) 返回数据库对象名 TYPEPROPERTY(type,property) 返回有关数据类型的信息 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.1 批处理及结束标志GO 1. 批处理的概念 批处理是同时从应用程序发送到SQL Server 2005服务器并得以执行的一组单条或多条Transact-SQL语句。 SQL Server将批处理的语句编译为单个可执行单元,称为执行计划。执行计划中的语句每次执行一条。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.1 批处理及结束标志GO 2. 批处理结束标志GO 批处理使用GO作为结束标志。当编译器读到GO时,就会把上一个GO到当前GO之间所有的T-SQL语句作为一个批处理,编译成一个执行计划包发送给服务器执行。 GO的语法格式为:GO [count] 功能:向SQL Server实用工具发出一批Transact-SQL语句结束的信号。 参数说明:count为正整数,指定GO之前的批处理执行的次数。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.1 批处理及结束标志GO 2. 批处理结束标志GO 例如 Declare @d datetime; set @d=getdate(); select dateadd(yy,2,@d),dateadd(q,2,@d) go 2 select datediff(d,getdate(),'20100501') select month(getdate()),year(getdate()),day(getdate()) select datepart(mm,getdate()),datepart(yy,getdate()),datepart(dd,getdate()) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.1 批处理及结束标志GO 3. 批处理的使用规则 (1)CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER和CREATE VIEW等语句在同一个批处理中只能提交一个。 (2)不能在同一个批处理中更改表,然后引用新列。 (3)不能把规则和默认值绑定到表字段或者自定义字段上之后,立即在同一批处理中使用它们。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.1 批处理及结束标志GO 3. 批处理的使用规则 (4)不能定义一个CHECK约束之后,立即在同一个批处理中使用。 (5)若EXECUTE语句是批处理中的第一句,则可以省略EXECUTE关键字,否则必须写上。 (6)使用SET语句设置的某些SET选项不能应用于同一个批处理中的查询。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 控制流语句是控制程序中语句的执行分支、循环等流程的语句。 不使用控制流语句,则各Transact-SQL语句按其出现的顺序先后依次执行(也称顺序结构)。 在SQL Server 2005中,控制流语句主要用来控制SQL语句、语句块或者存储过程的执行流程。 控制流语句不能跨多个批处理、用户定义函数或存储过程。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 1. Begin…End语句 BEGIN…END语句用于将多个T-SQL语句组合成一个语句块,并将它们视为一个整体来执行。 在条件和循环等控制流语句中,当条件的分支或循环的循环体要执行两个或者多个语句时,需要使用BEGIN…END语句把它们组合起来。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 1. Begin…End语句 BEGIN…END语句的语法格式为: BEGIN { { sql_statement | statement_block } END 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 1. Begin…End语句 说明: ①参数{sql_statement|statement_block}是使用语句块定义的任何有效的T-SQL语句或语句组。 ②BEGIN和END是控制流语言的关键字,必须成对出现。 ③BEGIN...END语句块允许嵌套。 ④有些T-SQL语句不应分组在同一批处理或语句块中,请参见批处理要求。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 IF...ELSE语句是用来实现双分支选择结构的条件语句,其特点是所给定的选择条件(布尔表达式,即逻辑表达式)的值如果为真(TRUE),则执行a1块;否则,则执行a2块。 IF...ELSE语句的执行流程如图2-16所示。 TRUE 逻辑表达式 FALSE a1 a2 IF...ELSE后面语句 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 IF...ELSE语句的语法结构为: IF Boolean_expression {sql_statement1|statement_block1} [ELSE {sql_statement2|statement_block2}] 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 说明: ①参数Boolean_expression为分支条件,是返回TRUE或FALSE的表达式(如比较表达式、逻辑表达式等)。如果该参数中含有SELECT语句(即查询的结果参与运算),则必须用括号将SELECT语句括起来。 ②{sql_statement1|statement_block1}、{sql_statement2|statement_block2}是任何T-SQL语句或用语句块定义的语句分组。 请使用BEGIN...END定义语句块,否则IF或ELSE条件只能影响一个T-SQL语句。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 TRUE 布尔表达式 FALSE a1 IF...ELSE后面语句 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 当此构造用于存储过程时,通常用于测试某个参数是否存在。 ⑤可以在其他IF之后或在ELSE下面,嵌套另一个IF语句,可以实现多分支选择。 嵌套级数的限制取决于可用内存。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 例如:一元二次方程的求解。 2.3.2 控制流语句 2. IF...ELSE语句 Declare @a int,@b int,@c int,@d int Select @a=2,@b=4,@c=1 set @d= @b*@b-4*@a*@c If @d>=0 select (-@b+sqrt(@d))/(2*@a), (-@b-sqrt(@d))/(2*@a) 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 Declare @a int,@b int,@c int,@d int Select @a=2,@b=4,@c=1 set @d= @b*@b-4*@a*@c If @d>=0 select (-@b+sqrt(@d))/(2*@a), (-@b-sqrt(@d))/(2*@a) else select ‘无实根’ 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF...ELSE语句 Declare @a int,@b int,@c int,@d int Select @a=2,@b=4,@c=1 set @d= @b*@b-4*@a*@c If @d>=0 if @d>0 select (-@b+sqrt(@d))/(2*@a), (-@b-sqrt(@d))/(2*@a) else select -@b/(2*@a) select ‘无实根’ 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
例如: declare @x int,@y int set @x=10 set @y=20 if (@x<@y) begin print '*****' print '#####' end else print'$$$$$' print'@@@@@'
处理流程的一般结构: 输入数据 处理数据 输出数据 定义局部变量,并给局部变量赋值 存储过程的输入参数 查询得到的数据 Print Select 存储过程的输出参数 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 2. IF语句——多分支结构 例题:根据个人工资、薪金所得,计算个人所得税,基数为3500元 级数 含税级距 税率(%) 速算 扣除数 1 不超过1500元的 3 2 超过1500元至4500元的部分 10 105 超过4500元至9000元的部分 20 555 4 超过9,000元至35,000元的部分 25 1005 5 超过35,000元至55,000元的部分 30 2755 6 超过550,000元至80,000元的部分 35 5505 7 超过80,000元的部分 45 13505 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 Declare @x int,@salary int Select @salary=5600 If @salary<=3500 set @x=0 Else if @salary<=3500+1500 set @x=(@salary-3500)*0.03 else if @salary<=3500+4500 set @x= (@salary-3500)*0.1-105 if @salary<=3500+9000 set @x=(@salary-3500)*0.20-555 if @salary<=3500+35000 set @x= (@salary-3500)*0.25-1005 if @salary<=3500+55000 set @x= (@salary-3500)*0.30-2755 if @salary<=3500+80000 set @x=(@salary-3500)*0.35-5505 set @x=(@salary-3500)*0.45-13505 print @x 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 3. CASE表达式(略) CASE表达式用于针对多个不同条件有选择地进行计算,并将其中一个符合条件(为TRUE)的结果表达式的值返回。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 程序设计中的循环结构(简称循环)是指在程序中,从某处开始有规律地反复执行某一操作块(或程序块)的现象。 被重复执行的该操作块(或程序块)称为循环体,循环体的执行与否及次数多少视循环类型与条件而定。 无论何种类型的循环结构,其共同的特点是必须确保循环体的重复执行能被终止(即非无限循环,或不能死循环)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 一个循环结构一般应具备如下的条件(图2-20所示): (1)循环的初始化:一般为给循环控制变量及其他内存变量赋初值,将记录指针定位到文件头或文件尾等; (2)循环头:循环语句的起始,设置、判断循环条件; (3)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 WHILE语句用于按照设置的条件重复执行SQL语句或语句块,即用来实现程序设计的循环结构。只要指定的条件为真,就重复执行循环体。 循环的初始化 循环头语句: 循环条件表达式 循环体 WHILE语句后 TRUE FALSE 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 TRUE FALSE 循环体 [CONTINUE] [BREAK] 2.3.2 控制流语句 4. WHILE语句 可以使用BREAK和CONTINUE关键字在循环内部控制WHILE循环中语句的执行(图2-21所示)。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 WHILE语句的语法结构为: WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] [ CONTINUE ] 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 说明: ①参数Boolean_expression为循环控制条件,是返回TRUE或FALSE的表达式。如果该参数中含有SELECT语句,则必须用括号将SELECT语句括起来。 ②{sql_statement | statement_block}为循环体,是T-SQL语句或用语句块定义的语句分组。请使用BEGIN...END定义语句块。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 说明: ③BREAK为可选关键字,若在循环体中使用BREAK,则导致从最内层的WHILE循环中退出,将执行出现在END关键字(循环结束的标记)后面的语句。 ④CONTINUE为可选关键字,若在循环体中使用CONTINUE,则使WHILE循环重新开始执行,忽略循环体中CONTINUE关键字后面的任何语句。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 说明: ⑤允许WHILE语句嵌套,即在一个WHILE语句的循环体中允许使用另一个WHILE语句,称为循环的嵌套或多重循环。 ⑥如果嵌套了两个或多个 WHILE 循环,则内层的 BREAK 将退出到下一个外层循环。将首先运行内层循环结束之后的所有语句,然后重新开始下一个外层循环。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 例如: DECLARE @n INT SET @n=1 WHILE @n<=10 BEGIN PRINT SPACE(11-@n)+REPLICATE('*',@N) SET @n=@n+1 END 注:找规律, (1)星号数与行的关系; (2)起始位置与行的关系 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.2 控制流语句 4. WHILE语句 SET @no=10 SET @n=1 例如: DECLARE @n INT,@no int SET @no=10 SET @n=1 WHILE @n<=@no BEGIN PRINT SPACE(11-@n)+REPLICATE('*',@n*2-1) SET @n=@n+1 END 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 1!=1 n!=(n-1)!*n 2.3.2 控制流语句 4. WHILE语句 计算20的阶乘 declare @sum bigint declare @i int set @sum = 1 set @i = 2 while (@i <= 20) begin set @sum = @i * @sum set @i = @i + 1 end print @sum 1!=1 n!=(n-1)!*n 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
求1!+2!+3!+……+20! 方法一:(用双重循环) declare @sum bigint,@t bigint,@i int,@j int set @sum=0 set @i=1 while @i<=20 begin set @j=1 set @t=1 while @j<=@i set @t=@t*@j set @j=@j+1 end set @sum=@sum+@t set @i=@i+1 print @sum
求1!+2!+3!+……+20! 方法二:(用单循环) declare @sum bigint,@t bigint,@i int set @sum=0 set @i=1 Set @t=1 while @i<=20 begin set @t=@t*@i set @sum=@sum+@t set @i=@i+1 end print @sum
求1000~2000之间不能被3 整除的数,当其累计和刚好到达或超过5000时,输出累加和并结束程序运行。 declare @n bigint,@sum bigint set @n=1000 set @sum=0 while @n<=2000 begin if @sum>=5000 break else if @n%3=0 set @n=@n+1 continue end print @n set @sum=@sum+@n print @sum
编写程序,求100~200之间的素数(除1、2外,只能被1和自身整除的正整数)。 Declare @i int,@n int,@k int Set @n=101 While @n<=200 begin set @k=cast(sqrt(@n) as int) set @i=2 while @i<=@k if @n%@i=0 break else set @i=@i+1 end if @i>@k print @n set @n=@n+2
现有大、中、小3种鱼,大鱼每条5元,中鱼每条3元,小鱼每5条1元。要使100元正好买100条鱼,编写程序求大、中、小鱼的鱼数 分析:100元最多买20条大鱼,33条中鱼,500条小鱼。因此,大鱼数应在1~20,中鱼数在1~33,小鱼数在1~100.
Declare @d int,@z int,@x int,@n int Select @d=1,@n=0 While @d<=20 begin Set @z=1 while @z<=33 Set @x=1 while @x<=100 if @d*5+@z*3+@x*0.2=100 and @d+@z+@x=100 set @n=@n+1 print '第'+ltrim(str(@n))+'买法:' print ' 大鱼数:'+ltrim(str(@d)) print ' 中鱼数:'+ltrim(str(@z)) print ' 小鱼数:'+ltrim(str(@x)) end set @x=@x+1 set @z=@z+1 set @d=@d+1
Declare @d int,@z int,@x int,@n int Select @d=1,@n=1 While @d<=20 begin Set @z=1 while @z<=33 Set @x=(100- @d*5-@z*3)*5 if @d+@z+@x=100 print '第'+ltrim(str(@n))+'买法:' print ' 大鱼数:'+ltrim(str(@d)) print ' 中鱼数:'+ltrim(str(@z)) print ' 小鱼数:'+ltrim(str(@x)) set @n=@n+1 end set @z=@z+1 set @d=@d+1
2.3 T-SQL其他语言元素 2.3.3 其它语句 1. 注释语句 为了便于程序的阅读,程序员在程序代码中添加注释,用于对程序的各种说明或注解的文本字符串,及其不执行注释语句。 SQL Server可以使用两种类型的注释字符: ANSI标准的注释符“--”,用于单行注释; 与C语言相同的程序注释符号,即“/* */”。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.3 其它语句 1. 注释语句 (1)“--”注释 “--”注释可以将注释插入单独行中、嵌套在 T-SQL 命令行的结尾或嵌套在 T-SQL 语句中,服务器不对注释进行处理。 其语法格式如下: -- text_of_comment 其中: ①参数text_of_comment为包含注释文本的字符串。 ②用“--”插入的注释由换行符终止。 ③注释没有最大长度限制。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.3 其它语句 1. 注释语句 (1)“--”注释 例如: --查询“大学计算机基础”课程的最高成绩 SELECT max(grade) FROM course JOIN sc ON course.cno=sc.cno WHERE course.cname=' 大学计算机基础' 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.3 其它语句 1. 注释语句 (2)“/* */”注释 多行的注释必须用/*和*/指明。其使用规则为:第一行用/*开始,接下来的注释行用**开始,并且用*/结束注释。服务器不考虑位于/*和*/之间的文本。 “/* */”注释的语法格式为: /* text_of_comment */ 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.3 其它语句 1. 注释语句 (2)“/* */”注释 其中: ①参数text_of_comment为注释文本,是一个或多个字符串。 ②注释没有最大长度限制。 ③支持嵌套注释。如果在现有注释内的任意位置上出现/*字符模式,便会将其视为嵌套注释的开始,因此,需要使用注释的结尾标记*/。如果没有注释的结尾标记,便会生成错误。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.3 其它语句 2. return语句 RETURN语句可在任何时候用于从过程、批处理或语句块中无条件退出,RETURN 之后的语句将不被执行。 RETURN语句的语法格式为: RETURN [ integer_expression ] 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 2.3.3 其它语句 2. return语句 说明: ①参数integer_expression为可选项,是程序结束返回的整数值。存储过程可向执行调用的过程或应用程序返回一个整数值。一般程序结束只用RETURN。 ②除非另有说明,所有系统存储过程均返回0值表示调用成功,非零值则表示调用失败。 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2.3 T-SQL其他语言元素 declare @sum int,@n int set @sum=0 set @n=100 例题:编程实现:输出100~500范围内的所有能被7和9同时整除的数以及它们的和, 当总和大于1000时,结束程序运行。 declare @sum int,@n int set @sum=0 set @n=100 while @n<=500 begin if @sum>1000 print @sum return end else if @n%7=0 and @n%9=0 set @sum=@sum+@n print @n set @n=@n+1 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社
2017/2/28 本 章 结 束 高等教育“十一五”国家级规划教材 《 数据库与程序设计 》 山东大学出版社