1、第第 4 章章创建数据类型和表创建数据类型和表第第 4 章章:创建数据类型和表创建数据类型和表创建数据类型创建数据类型创建表创建表创建已分区表创建已分区表第第 1 节节:创建数据类型创建数据类型系统提供的数据类型系统提供的数据类型使用系统提供的数据类型使用系统提供的数据类型别名数据类型别名数据类型演示:创建数据类型演示:创建数据类型 系统提供的数据类型系统提供的数据类型bigintbinarybitcharCLRcursordatedatetimedatetime2datetimeoffsetdecimalfloathierarchyidimageintmoneyncharntextnumer
2、icnvarcharrealrowversionsmalldatetimesmallintsmallmoneysql_varianttabletexttimetimestamptinyintvarbinaryvarcharuniqueidentiferxmlTransact-SQL 有以下系统数据类型有以下系统数据类型 使用系统提供的数据类型使用系统提供的数据类型 精确和近似数值数据类型精确和近似数值数据类型 精确精确 decimal,numeric 近似近似 float,real 字符数据类型字符数据类型 定长定长 nchar 变长变长 nvarchar 日期和时间数据日期和时间数据 日期和
3、时间日期和时间 datetime,smalldatetime 行版本行版本 timestamp 大数据值大数据值 大对象类型大对象类型 text,image max 限定符限定符 varchar(max),nvarchar(max),varbinary(max)别名数据类型别名数据类型 当多个表必须在一列中存储相同类型的数据时,可以使用别名数据类型当多个表必须在一列中存储相同类型的数据时,可以使用别名数据类型 必需的参数必需的参数包括包括“名称名称”、新数据类型基于的系统数据类型,以及可为新数据类型基于的系统数据类型,以及可为 NULL 性性 基于基于 SQL Server 中的系统数据类型中
4、的系统数据类型 删除别名数据类型时,在以后删除它们的批处理中,仍可以通过表变量引删除别名数据类型时,在以后删除它们的批处理中,仍可以通过表变量引用它们。用它们。如果别名类型是在如果别名类型是在 model 数据库中创建的,那么它将存在于所有新的用数据库中创建的,那么它将存在于所有新的用户定义数据库中。户定义数据库中。演示演示:创建数据类型创建数据类型在本演示中,你将看到如何:在本演示中,你将看到如何:使用使用 Transact-SQL 创建数据类型创建数据类型CREATE TYPE ShortDescription FROM nvarchar(10)NOT NULL;CREATE TYPE C
5、ashValue FROM decimal(8,2)NOT NULL;第第 2 节节:创建表创建表SQL Server 在行中如何组织数据在行中如何组织数据SQL Server 如何组织大数据值如何组织大数据值表的类型表的类型创建表的注意事项创建表的注意事项生成生成 Transact-SQL 脚本脚本演示:创建表演示:创建表 SQL Server 在行中如何组织数据在行中如何组织数据标头标头固定数据固定数据NBVB可变数据可变数据Null 块块可变块可变块4 字节字节数据数据2 字节字节10111001列数列数每个列的每个列的“可为可为 NULL 性性”位位(前前 8 列列)根据需要可根据需要
6、可有更多列位有更多列位2 字节字节2 字节字节变长列的数量变长列的数量指向第一个变长列指向第一个变长列数据末尾的指针数据末尾的指针每个变长列的每个变长列的附加指针附加指针SQL Server 如何组织大数据值如何组织大数据值 MAX 限定符扩大了多种数据类型的存储容量限定符扩大了多种数据类型的存储容量 大值数据类型的行为与其对应的小值数据类型大值数据类型的行为与其对应的小值数据类型 使用大数据值时,某些的工作方式有所不同使用大数据值时,某些的工作方式有所不同 表的类型表的类型 临时表有两种类型,本地和全局,它们的名称、可见性和可用性不同临时表有两种类型,本地和全局,它们的名称、可见性和可用性不
7、同 SQL Server 在一组特殊的表中存储定义服务器配置的数据在一组特殊的表中存储定义服务器配置的数据 已分区表的数据纵向分成多个单元,分布在多个文件组中已分区表的数据纵向分成多个单元,分布在多个文件组中 不可直接处理不可直接处理 SQL Server 2008 数据库引擎系统表中的数据。建议使数据库引擎系统表中的数据。建议使用目录视图访问用目录视图访问 SQL Server 元数据。元数据。创建表的注意事项创建表的注意事项 必须为每个列指定数据类型必须为每个列指定数据类型 可以在表定义中指定每个列是否允许可以在表定义中指定每个列是否允许 NULL 值值 考虑特殊列的需求,包括:考虑特殊列
8、的需求,包括:计算列计算列 标识属性标识属性 timestamp 列列 uniqueidentifier 列列 列名在一个表中必须唯一列名在一个表中必须唯一生成生成 Transact-SQL 脚本脚本“生成脚本向导生成脚本向导”可用来:可用来:一次生成多个对象的脚本一次生成多个对象的脚本 指定各种选项,如权限和排序规则指定各种选项,如权限和排序规则 使用对象资源管理器,可使用默认选项创建数据库或单个数据库对象的脚本使用对象资源管理器,可使用默认选项创建数据库或单个数据库对象的脚本演示演示:创建表创建表在本演示中,你将看到如何:在本演示中,你将看到如何:使用使用 SQL Server Manag
9、ement Studio 创建表创建表使用使用 Transact-SQL 创建表创建表第第 3 节节:创建已分区表创建已分区表已分区表已分区表分区函数分区函数分区方案分区方案可对分区数据执行的操作可对分区数据执行的操作演示:创建已分区表演示:创建已分区表 已分区表已分区表 2005Sales.Orders数据按范围横向分区数据按范围横向分区 2005CREATE PARTITION FUNCTION pf_OrderDate(datetime)AS RANGE RIGHTFOR VALUES(01/01/2003,01/01/2004,01/01/2005)分区函数分区函数分区函数定义分区边界
10、分区函数定义分区边界边界值可分配给边界值可分配给 LEFT 或或 RIGHTCREATE PARTITION SCHEME ps_OrderDateAS PARTITION pf_OrderDate TO(fg1,fg2,fg3,fg4,fg5)2005分区方案将分区指定到文件组分区方案将分区指定到文件组还可以定义还可以定义“下一步下一步”文件组文件组分区方案分区方案 2006SWITCH:将已填充的表或分区与空表或空分区交换将已填充的表或分区与空表或空分区交换MERGE:将两个相邻分区合并为一个分区将两个相邻分区合并为一个分区SPLIT:在现有分区中插入一个边界,以创建新分区在现有分区中插入
11、一个边界,以创建新分区SPLITSWITCHMERGE可对分区数据执行的操作可对分区数据执行的操作ALTER PARTITION FUNCTION myRangePF1()MERGE RANGE(100)ALTER PARTITION FUNCTION myRangePF1()SPLIT RANGE(500)-原分区(11000)ALTER TABLE test_table SWITCH PARTITION source_partition_number_expression TO target_table PARTITION target_partition_number_expressio
12、n 演示演示:创建已分区表创建已分区表在本演示中,你将看到如何:在本演示中,你将看到如何:创建分区函数、分区方案和已分区表创建分区函数、分区方案和已分区表查看表分区查看表分区实验实验:创建数据类型和表创建数据类型和表实验实验 4-1:创建数据类型:创建数据类型实验实验 4-2:使用新的日期和时间数据类型:使用新的日期和时间数据类型实验实验 4-3:创建表:创建表实验实验 4-4:创建已分区表:创建已分区表登录信息登录信息虚拟机虚拟机NY-SQL-01用户名用户名Student密码密码Pa$w0rd预估时间预估时间:60 分钟分钟SELECT CAST(2007-05-08 12:35:29.1
13、234567+12:15 AS time(7)AS time ,CAST(2007-05-08 12:35:29.1234567+12:15 AS date)AS date ,CAST(2007-05-08 12:35:29.123 AS smalldatetime)AS smalldatetime ,CAST(2007-05-08 12:35:29.123 AS datetime)AS datetime ,CAST(2007-05-08 12:35:29.1234567+12:15 AS datetime2(7)AS datetime2 ,CAST(2007-05-08 12:35:29.1
14、234567+12:15 AS datetimeoffset(7)AS datetimeoffset;SELECT 2006-04-04T15:50:59.997 AS UnconvertedText,CAST(2006-04-04T15:50:59.997 AS datetime)AS UsingCast,CONVERT(date,2006-04-04T15:50:59.997,126)AS UsingConvertDate,CONVERT(time,2006-04-04T15:50:59.997,126)AS UsingConvertTime;GOCREATE PARTITION FUNC
15、TION myRangePF1(int)AS RANGE LEFT FOR VALUES(1,100,1000);GO CREATE PARTITION SCHEME myRangePS1 AS PARTITION myRangePF1 TO(Test1FG,Test2FG,Test3FG,Test4FG);GOCREATE TABLE ReturnsArchive(ReturnID int identity,ProductID int,CustomerID int,ReturnDate datetime,ReturnReason ShortDescription NULL)ON myRangePS1(ReturnID);GO