VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > T-SQL >
  • sql语句大全之SQL Server 2008数据类型(1)

 SQL Server 2008数据类型(1
在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。
1.  CREATE TYPE Address  
2.  FROM varchar(35) NOT NULL 
如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。可以通过在Management Studio界面中脚本化这种改变来观察其原因。Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。最后,界面删除旧表并用新的数据类型重命名新表。当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。
如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。
1.  ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70) 
说明:
在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。
您可能想对SQL Server表编写一个报表,显示表中每列的数据类型。完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。在下面的代码中,有两个函数可能不太为您所熟悉。函数TYPE_NAME()将数据类型id转换为适当的名称。要进行反向操作,可使用TYPE_ID()函数。需要注意的另一个函数是SCHEMA_ID(),它用于返回架构的标识值。在需要编写有关SQL Server元数据的报表时,这是特别有用的。
1.  SELECT o.name AS ObjectName,  
2.  c.name AS ColumnName,  
3.  TYPE_NAME(c.user_type_id) as DataType  
4.  FROM    sys.objects o JOIN sys.columns c  
5.  ON      o.object_id = c.object_id  
6.  WHERE   o.name ='Department' 
7.  and             o.Schema_ID = SCHEMA_ID('HumanResources') 
该代码返回如下结果(注意,Name是一种用户定义的数据类型)。
1.  ObjectName                ColumnName                    DataType  
2.  ---------------------------------------------------  
3.  Department                DepartmentID          smallint  
4.  Department                Name                        
Name  
5.  Department                GroupName                         Name  
6.  Department                ModifiedDate        
datetime 
1. 字符数据类型
字符数据类型包括varchar、char、nvarchar、nchar、text以及ntext。这些数据类型用于存储字符数据。varchar和char类型的主要区别是数据填充。如果有一表列名为FirstName且数据类型为varchar(20),同时将值Brian存储到该列中,则物理上只存储5个字节。但如果在数据类型为char(20)的列中存储相同的值,将使用全部20个字节。SQL将插入拖尾空格来填满20个字符。
如果要节省空间,那么为什么还使用char数据类型呢?使用varchar数据类型会稍增加一些系统开销。例如,如果要存储两字母形式的州名缩写,则最好使用char(2)列。尽管有些DBA认为应最大可能地节省空间,但一般来说,好的做法是在组织中找到一个合适的阈值,并指定低于该值的采用char数据类型,反之则采用varchar数据类型。通常的原则是,任何小于或等于5个字节的列应存储为char数据类型,而不是varchar数据类型。如果超过这个长度,使用varchar数据类型的好处将超过其额外开销。
nvarchar数据类型和nchar数据类型的工作方式与对等的varchar数据类型和char数据类型相同,但这两种数据类型可以处理国际性的Unicode字符。它们需要一些额外开销。以Unicode形式存储的数据为一个字符占两个字节。如果要将值Brian存储到nvarchar列,它将使用10个字节;而如果将它存储为nchar(20),则需要使用40字节。由于这些额外开销和增加的空间,应该避免使用Unicode列,除非确实有需要使用它们的业务或语言需求。
接下来要提的数据类型是text和ntext。text数据类型用于在数据页内外存储大型字符数据。应尽可能少地使用这两种数据类型,因为可能影响性能但可在单行的列中存储多达2GB的数据。与text数据类型相比,更好的选择是使用varchar(max)类型,因为将获得更好的性能。另外,text和ntext数据类型在SQL Server的一些未来版本中将不可用,因此现在开始还是最好使用varchar(max)和nvarchar(max)而不是text和ntext数据类型。
表1-1列出了这些类型,对其作了简单描述,并说明了要求的存储空间。
表1-1
数 据 类 型 描    述 存 储 空 间
Char(n) N为1~8000字符之间 n字节
Nchar(n) N为1~4000 Unicode字符之间 (2n字节)+2字
节额外开销
Ntext 最多为230–1
(1 073 741 823)Unicode字符
每字符2字节
Nvarchar(max) 最多为230–1
(1 073 741 823)Unicode字符
2×字符数+2字
节额外开销
Text 最多为231–1
(2 147 483 647)字符
每字符1字节
Varchar(n) N为1~8000字符之间 每字符1字节+2
字节额外开销
Varchar(max) 最多为231–1(2 147 483 647)字符 每字符1字节+2
字节额外开销
 
2. 精确数值数据类型
数值数据类型包括bit、tinyint、smallint、int、bigint、numeric、decimal、money、float以及real。这些数据类型都用于存储不同类型的数字值。第一种数据类型bit只存储0或1,在大多数应用程序中被转换为true或false。bit数据类型非常适合用于开关标记,且它只占据一个字节空间。其他常见的数值数据类型如表1-2所示。
表1-2
数 据 类 型 描    述 存 储 空 间
bit 0、1或Null 1字节(8位)
tinyint 0~255之间的整数 1字节
smallint –32 768~32 767之间的整数 2字节
int –2 147 483 648~
2 147 483 647之间的整数
4字节
bigint –9 223 372 036 854 775 808~
9 223 372 036 854 775 807
之间的整数
8字节
 
(续表)
数 据 类 型 描    述 存 储 空 间
numeric(p,s)或
decimal(p,s)
–1 038+1~1 038–1之间的数值 最多17字节
money –922 337 203 685 477.580 8~
922 337 203 685 477.580 7
8字节
smallmoney –214 748.3648~2 14 748.3647 4字节
 
 
 
    

相关教程