使用特殊数据类型

在 SQL Server 中,特殊数据类型包括 bithierarchyidsql_variantsysnametabletimestamp 和别名数据类型。

使用特殊数据类型 - kewangwu - kewangwu的博客 sql_variant

sql_variant 数据类型允许单个列、参数或变量存储不同数据类型的数据值。sql_variant 列的每个实例均记录数据值和说明此值的元数据。有以下元数据可用:

  • 基本数据类型
  • 最大大小
  • 小数位数
  • 精度
  • 排序规则

若要检索特定 sql_variant 实例的元数据,请使用 SQL_VARIANT_PROPERTY 函数。

在下面的示例中,第二个表包含 DE>sql_variantDE> 列:

CREATE TABLE ObjectTable ( ObjectID int CONSTRAINT PKObjectTable PRIMARY KEY, ObjectName nvarchar(80), ObjectWeight decimal(10,3), ObjectColor nvarchar(20)) CREATE TABLE VariablePropertyTable ( ObjectID int REFERENCES ObjectTable(ObjectID), PropertyName nvarchar(100), PropertyValue sql_variant, CONSTRAINT PKVariablePropertyTable PRIMARY KEY(ObjectID, PropertyName))

使用特殊数据类型 - kewangwu - kewangwu的博客

sysname

sysname 数据类型用于表列、变量以及用于存储对象名的存储过程参数。sysname 的精确定义与标识符规则有关。因此,它可能会因 SQL Server 实例的不同而有所不同。除了 sysname 在默认情况下为 NOT NULL 之外,sysname 的功能与 nvarchar(128) 相同。在早期版本的 SQL Server 中,sysname 被定义为 varchar(30)

ms191240.note(zh-cn,SQL.100).gif重要提示:

在区分大小写或使用二进制排序规则的数据库中,仅当 sysname 以小写显示时,才会被识别为 SQL Server 系统数据类型。

使用特殊数据类型 - kewangwu - kewangwu的博客 table

table 数据类型功能类似于临时表。它用于存储结果集以便进行后续处理。此数据类型只能用于定义类型为 table 的局部变量和用户定义函数的返回值。

表变量或返回值的定义包括每列的列定义、数据类型、精度和小数位数以及可选的 PRIMARY KEY、UNIQUE、NULL 和 CHECK 约束。不能将用户定义表用作数据类型。

声明变量或创建函数时,必须定义存储在 table 变量中或由用户定义函数返回的行的格式。语法基于 CREATE TABLE 语法,例如:

DECLARE @TableVar TABLE (Cola int PRIMARY KEY, Colb char(3)) INSERT INTO @TableVar VALUES (1, 'abc') INSERT INTO @TableVar VALUES (2, 'def') SELECT * FROM @TableVar GO

只能在某些 SELECT 和 INSERT 语句中使用返回 tabletable 变量和用户定义函数,其中在 UPDATE、DELETE 和 DECLARE CURSOR 语句中支持表。不能在任何其他 Transact-SQL 语句中使用返回 tabletable 变量和用户定义函数。

必须将应用到表的索引或其他约束定义为 DECLARE 变量或 CREATE FUNCTION 语句的一部分。以后不能应用这些索引和约束,因为 CREATE INDEX 或 ALTER TABLE 语句不能引用表变量和用户定义函数。

有关用于定义 table 变量和用户定义函数的语法的详细信息,请参阅 DECLARE @local_variable (Transact-SQL)CREATE FUNCTION (Transact-SQL)

使用特殊数据类型 - kewangwu - kewangwu的博客 timestamp

timestamp 数据类型与时间和日期无关。timestamp 值是二进制数值,表明数据库中的数据修改发生的相对顺序。

从不在键(尤其是主键)中使用 timestamp 列,因为每次修改行时,timestamp 值都会更改。

若要记录表中的数据修改次数,请使用 datetime2smalldatetime 数据类型记录事件和触发器以在进行修改时自动更新值。

使用特殊数据类型 - kewangwu - kewangwu的博客 别名数据类型

别名数据类型使您可以用针对特定用途定制的描述性名称和格式来扩展 SQL Server 基本数据类型(例如 varchar)。例如,以下语句实现了一个 DE>birthdayDE> 用户定义数据类型,它基于 DE>datetimeDE> 数据类型并允许空值 (DE>NULLDE>):

EXEC sp_addtype birthday, datetime, 'NULL'

选择实现用户定义数据类型的基类型时,请谨慎从事。例如,在美国,社会保障号的格式为 nnn-nn-nnnn。虽然社会保障号包含数字,但数字会形成标识符并且无法进行数学运算。因此,通常将用户定义的社会保障号数据类型创建为 varchar,并且创建 CHECK 约束以强制执行存储在表中的社会保障号的格式,如下面的示例所示:

EXEC sp_addtype SSN, 'VARCHAR(11)', 'NOT NULL' GO CREATE TABLE ShowSSNUsage (EmployeeID int PRIMARY KEY, EmployeeSSN SSN, CONSTRAINT CheckSSN CHECK ( EmployeeSSN LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' ) ) GO

如果通常将 SSN 列用作索引(尤其是聚集索引)中的键列,则当改用 int 基本数据类型实现 SSN 用户定义数据类型时,可将键的大小从 11 个字节缩小到 4 个字节。键大小的这种减小改善了数据检索。与显示或修改 SSN 值时进行从 int 到字符格式的额外转换处理相比,提高数据检索效率以及避免使用 CHECK 约束通常更为重要。

使用特殊数据类型 - kewangwu - kewangwu的博客 bit

bit 数据类型是一个存储 0 或 1 的数值数据类型。字符串值 true 和 false 可转换为 bit 值,如下面的示例所示:

SELECT CONVERT (bit, 'true') SELECT CONVERT(bit, 'false')

在此示例中,DE>trueDE> 被转换为 DE>1DE>,DE>falseDE> 被转换为 DE>0DE>。bit 数据无需用单引号括起来。

使用特殊数据类型 - kewangwu - kewangwu的博客 hierarchyid

hierarchyid 数据类型用于管理具有层次结构的层次结构数据和表。若要在 Transact-SQL 代码中处理层次结构数据,请使用 hierarchyid 函数。有关详细信息,请参阅使用 hierarchyid 数据类型(数据库引擎)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值