和其他程序设计语言一样,SQL Server也提供了用于编写结构化程序的数据类型、常量、变量、运算符和表达式等语法。理解和掌握这些语法是Transact-SQL程序设计的基础。
一。用户定义数据类型
SQL Server有4种基本数据类型:字符和二进制数据、日期/时间数据、逻辑数据和数值数据。SQL Server也支持用户定义的数据类型,但这只是使用户能够限定已有的数据类型,方便用户对数据的操作,而不是定义具有新的存储和检索特点的新类型。
SQL Server允许在系统数据类型的基础上建立用户定义的数据类型。用户定义数据类型可以用在CREATE DATABASE 和ALTER DATABASE 语句中定义数据表列,并且可以将默认和规则关联于用户定义数据类型,为用户定义数据类型的列提供默认值和完整性约束。
例如,创建员工表的编号列时,可能将员工编号设置为char(4),而出勤表的员工编号可能设置为char(3),在创建数据库关系时,会出现员工编号列的长度输入错误,这种错误的解决办法是使用用户定义类型来为经常使用的列设置一种类型。
创建用户定义数据类型时,必须提供3个参数:名称、作为新数据类型基础的系统数据类型和NULL值属性(数据类型是否允许NULL值)。
在SQL Server中,提供了两种方式来创建用户定义数据类型:系统存储过程和SQL Server管理平台。
1.使用系统存储过程来创建用户定义数据类型
命令格式如下:
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[,[@nulltype=]'null_type']
[,[@owner=]'owner_name']
各选项的含义如下:
(1)[@typename=]type:用户定义数据类型名称。
(2)[@phystype=]system_data_type:用户定义的数据类型所基于的物理数据类型或SQL Server提供的数据类型(如decimal、int等)。
(3)[@nulltype=]'null_type':指明用户定义的数据类型处理空值的方式,默认值为NULL,还可以为NOT NULL或NONULL。
(4)[@owner=]'owner_name':指定新类型的创建者或所有者。若没有指定,则为当前用户。
执行系统存储过程sp_addtype后,如果执行成功,则会返回数值0,否则返回数值1.
例如,为Sales数据库创建一个不允许为NULL值的test_add用户定义数据类型。
EXEC sp_addtype test_add,'Varchar(10)','NOT NULL'
此后,test_add可用为数据列或变量的数据类型。
2.使用SQL Server管理平台创建用户定义数据类型
在SQL Server管理平台中,为Sales数据库创建一个不允许为NULL值的test_add用户定义数据类型,操作步骤如下:
(1)选择Sales数据库,并展开,然后选择“可编程性”结点并展开,选择“类型”并展开,在“用户定义数据类型”结点上右击,在出现的快捷菜单中选择“新建用户定义数据类型”命令。弹出“新建用户定义数据类型”窗口。
(2)在“用户定义的数据类型属性”对话框中的名称文本框内输入test_add,在“数据类型”下拉列表框中,选择char,在“长度”文本框中输入10,选中“允许空值”复选框。
(3)单击“确定”按钮完成创建用户自定义数据类型。
二。常量与变量
在程序运行中保持常值的数据,即程序本身不能改变其值的数据,称为常量,在程序中经常直接使用文字符号表示。相应地,在程序运行过程中可以改变其值的数据,称为变量。
1.常量
常量是表示特定数据值的符号,其格式取决于其数据类型,具有以下几种类型:字符串和二进制常量、日期/时间常量、数值常量、逻辑数据常量。
1)字符串和二进制常量
字符串常量括在单引号内并包含字母数字字符(a~z,A~Z和0~9)以及特殊字符,如感叹号(!)、at符(@)和数字号(#)等。若字符串中本身又有单引号字符,则单引号字符要用两个单引号来表示。例如:
'Cincinnati'、'0''Brien'、'Process X is 50% complete.'为字符串常量。
SQL Server中,字符串常量还可以采用Unicode字符串的格式,即在字符串前面用N标识(N标识SQL -92标准中的国际语言,National Language),如N'A SQL Server string',表示字符串'A SQL Server string'为Unicode字符串。
二级制常量具有前缀0x并且是十六进制数字字符串,它们不适用引号。
例如,0xAE、0x12Ef\0x69048AEFDD010E、0x(空串)为二进制常量。
2)日期/时间常量
datetime常量使用特定格式的字符日期值表示,用单引号括起来。下表概况了几种日期时间格式
输入格式 | datetime值 | Smalldatetime |
Sep 3,2008 1:34:34.122 | 2008-09-03 01:34:34.123 | 2008-09-03 01:35:00 |
9/3/2008 1PM | 2008-09-09 13:00:00.000 | 2008-09-03 13:00:00 |
9.3.2008 13:00 | 2008-09-03 13:00:00.000 | 2008-09-03 13:00:00 |
13:25:19 | 1900-01-01 13:25:19.000 | 1900-01-01 12:25:00 |
9/3/2008 | 2008-09-03 00:00:00.000 | 2008-09-03 00:00:00 |
输入时,可以使用“/”、“.”、“-”作为日期/时间常量的分隔符。默认情况下,服务器按照mm/dd/yy的格式(即