SQL Server数据类型

SQL numeric数据类型

作用: 存储小数,但是和编程语言的float等不同,即使数据是3.00,存储时也会存储两位小数点后的数字。

float类型 当你给定的数据是整数的时候,那么它就以整数给你处理。0.00而实际存储是0.

用途:
用于保存对准确精度有重要要求的值,例如与金钱有关的数据。

用法:
例如:
salary DECIMAL(5,2)

  • 5 (精度(precision)) 代表重要的十进制数字的数目

  • 2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,

因此,salary 列可以存储的值范围是从 -99.99 到 99.99。
(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。

管理大对象类型数据

大对象(Large Object,简称LOB)实际上是指那些包含任何数字化信息的数据字段,数字化信息可以是音频、视频、图像以及文档等
这类数据多以大容量文件的形式出现,如声音文件或图像文件等。

SQL Server 2016能够更高效地存储和检索大型字符、Unicode 和二进制数据,包括varchar(max)、nvarchar(max) 和 varbinary(max) 等大值数据类型,由此可以使用大值数据类型来存储最大为 \(2^{31}-1\)个字节的数据。

例如,在 SQL Server 2016中,可以定义能存储最多可达 \(2^{31}\)字节的字符、整数和Unicode数据的变量

分类

通常情况下,大对象数据又可分为3种数据类型:

  1. 二进制大对象数据(BLOB)
  2. 字符巨型对象数据(CLOB)
  3. 双字节巨型大对象(DBCLOB)数据

BLOB用于保存长度可变的字符串数据,以字节为量度单位,字符串最长可达2GB。
BLOB也可以用于保存诸如图像(.jpg、.gif、.bmp)和声音(.wav、.wma、.mp3)等多媒体数据,以及保存诸如Word一类的文档(.doc、.txt、.pdf)数据。

CLOB类型的字段主要用于保存大容量的文本数据,即经常出现在其他数据库系统(例如Access数据库)中的备注字段。
CLOB型的字段最大能够保存高达4GB的字符串型文本。

DBCLOB用于保存变长的双字节Unicode字符串数据,最多可以保存4GB的字符串数据,例如文档等。

大对象数据的使用方法

SQL Server 2016为向数据库中导入数据提供了很多方法,

  1. BCP工具 (大量数据导入或导出数据库)
  2. BULK INSERT命令 (Transact-SQL)

BULK INSERT命令可以按照用户指定的格式将包括LOB文件在内的数据文件加载到数据表或视图中。
BULK INSERT命令为用户提供了大量的参数,因此应用起来非常灵活和方便。这里仅介绍该命令提供的两种主要形式:

BULK INSERT TableName FROM DataFile
        WITH (FIELDTERMINATOR = 'delimeter')

-- 或:

BULK INSERT TableName FROM DataFile
        WITH(FORMATFILE = 'format_file_path')

文本文件的导入

第1种格式常用于向数据表中导入结构化的文本文件(如Text文件)等。

【例7.24】利用BULK INSERT命令向teaching 数据库中的st_score数据表添加数据。该表的结构如图7-5所示。
image

如果需要批量向该表输入记录,可以为此创建一个文本文件test101.txt,且位于D:\SQLTXT文件夹之下,将其按照如下形式进行排列:

18025121107/梁欣那/c05109/62.00
18035222201/夏文开/c05109/92.00
18135222201/夏文格/c08171/82.00
18137221508/平元/c05109/91.00
18137221508/平冬/c08106/95.00
18137221508/平钒/c08123/89.00

此时可以使用BULK INSERT命令将test101.txt中的记录直接插入到数据表st_score中。
由于在test101.txt文件中,数据字段间以“/”为分隔符,因此使用BULK INSERT的具体代码如下所示:

BULK INSERT st_score
FROM 'D:\SQLTXT\test101.txt'
	WITH (FIELDTERMINATOR = '/')

图像文件的导入

导入图像文件需要为BULK INSERT命令的WITH参数提供用于说明插入数据方式的格式文件format_file_path,此方式非常繁琐。也可以使用OPENROWSET命令实现图像文件导入。

【例7.25】在teaching数据库中创建expic表,然后向该表添加新的记录。使用OPENROWSET命令的方法添加大容量数据。

操作步骤如下。
(1)创建expic表,该数据表的结构如图7-7所示。下面以teaching数据库中的expic数据表为例,向其中添加一条新的记录。

(2)在查询编辑器中输入如下代码:

INSERT INTO expic(studentno, sname, address,picture) 
SELECT '18120211357','苏钡' , '中国山东青岛' ,
*FROM OPENROWSET(BULK N'd:\sqlpic\girl.jpg', SINGLE_BLOB) AS 图像

(3)执行下列命令后,一条新的记录将被添加到expic数据表中。此时可以读取新加入记录的信息,直接查看其Picture域的长度是否为25352字节。如果是,则说明图像文件已被成功地输入到记录的Picture字段中,结果如图7-8所示。

SELECT studentno AS 学号, sname AS 姓名, address AS 家庭住址,
DataLength(Picture) AS 照片大小
FROM expic
WHERE studentno  ='18120211357'

image

posted @ 2022-11-14 09:44  kingwzun  阅读(250)  评论(0编辑  收藏  举报