在SQL Server中,特殊的数据类型主要有三个,分别是:bit、sql_variant 和 sysname
一,bit
bit类型,只有三个有效值:0,1 和 null,字符串true或false能够隐式转换为bit类型,true转换为1,false转换为0;任何非0的整数值转换成bit类型时,值都是1。
1,将字符串 true 和 false 隐式转换成 bit 类型
declare @bit_true bit
declare @bit_false bit
set @bit_true='true'
set @bit_false='false'
select @bit_true,@bit_false
2,存储空间
bit类型存储 0 和 1 ,只需要使用 1 bit 就能表示,但是,在存储到Disk时,SQL Server按照Byte来分配存储空间。如果表中只有1个 bit 列,那么该列将会占用1Byte的空间,一个Byte最多存储8个bit列。
The SQL Server Database Engine optimizes storage of
bit columns. If there are 8 or less
bit columns in a table, the columns are stored as 1 byte. If there are from 9 up to 16
bit columns, the columns are stored as 2 bytes, and so on.
二,sql_variant
1,存储空间
sql_variant 是变长的数据类型,包含两部分信息:基础类型和Value,最多存储8000Byte的数据。
sql_variant includes both the base type information and the base type value. The maximum length of the actual base type value is 8,000 bytes.
declare @sv sql_variant
set @sv=REPLICATE('abcd',2001)
--max bytes:8000
select len(cast(@sv as varchar(max)))
2,赋值和运算
在赋值时,SQL Server 自动将其他数据类型隐式转换为sql_variant类型,但是,SQL Server不支持将sql_variant类型隐式转换成其他数据类型,必须显式转换。不能直接对sql_variant进行运算,例如,在对sql_variant 类型进行算术/字符操作时,必须显式将其转换成基础数据类型,然后才能对其进行运算。
When handling the
sql_variant data type, SQL Server supports implicit conversions of objects with other data types to the
sql_variant type. However, SQL Server does not support implicit conversions from
sql_variant data to an object with another data type.
declare @var_int sql_variant
declare @var_bit sql_variant
set @var_bit='true'
set @var_int=10
select @var_bit,@var_int,cast(@var_bit as bit),cast(@var_int as int)
三,sysname
sysname
是一个系统数据类型,用于定义表列、变量以及存储过程的参数,是
nvarchar(128)
的同义词,当该类型用于定义table column时,SQL Server 会自动添加
not null ,等价于
nvarchar(128) not null。
查看sysname的定义
exec sp_help sysname
使用sysname定义变量或参数时,等价于
nvarchar(128)
使用sysname定义column的类型时,等价于
nvarchar(128)
not null
当使用sysname定义column的类型时,SQL Server 自动在sysname 后面加上not null,即 sysname not null,等价于
nvarchar(128)
not null
create table dbo.dt
col sysname
--系统生成的create table 脚本
CREATE TABLE [dbo].[dt]
[col] [sysname] NOT NULL
参考文档:
sql_variant (Transact-SQL)
作者:悦光阴
出处:http://www.cnblogs.com/ljhdo/
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
ASP.NET Core+Element+SQL Server开发校园图书管理系统(四)(下)
ASP.NET Core+Element+SQL Server开发校园图书管理系统(四)(下)
ASP.NET Core+Element+SQL Server开发校园图书管理系统(四)(上)
ASP.NET Core+Element+SQL Server开发校园图书管理系统(四)(上)
ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)(下)
ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)(下)
SQL Server--实体再复习
前些天小编所在的组织部重构,组长交给小编一项设计实体的活儿,它是我们软件灵魂(数据)的载体,实体的抽象影响到数据库设计,数据库设计的质量影响到整个程序的运营
SQL Server外连接、内连接、交叉连接
小编在做组织部维护最后收尾工作的时候,遇到了这样一个问题,需要将定性考核得分查出来、定量考核对应的数据查出来并进行得分计算、附加分查出来,最后将这三部分信息汇总之后得到总成绩,如果其中一项成绩没有进行计算那么是可以得到成绩的。