在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)

特殊的数据类型: bit、sql_variant、sysname的更多相关文章

  1. mssql sqlserver 数据类型sql_variant简介说明

    转自: http://www.maomao365.com/?p=9712  摘要: 下文讲述sqlserver中sql_variant数据类型定义.赋值.应用的相关说明,如下所示: 实验环境:sql ...

  2. SQL数据类型

    1.Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多8,000个字符. n varchar(n) 可变长度的字符串.最多8,000个字符.   varchar ...

  3. SqlServer数据类型

    Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. n varchar(n) 可变长度的字符串.最多 8,000 个字符.   varch ...

  4. 【转】SQL Server sql_variant 类型的比较

    sql_variant 类型用于存储SQL SERVER中支持的各种数据类型. 为了进行 sql_variant 比较,SQL Server 数据类型层次结构顺序划分为多个数据类型系,sql_vari ...

  5. SQL的数据类型

    Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. N的范围1-8000 varchar(n) 可变长度的字符串.最多 8,000 个字符 ...

  6. SQL整理1 数据类型

    Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. N的范围1-8000 varchar(n) 可变长度的字符串.最多 8,000 个字符 ...

  7. SQL 数据类型

    Microsoft Access.MySQL 以及 SQL Server 所使用的数据类型和范围. Microsoft Access 数据类型 数据类型 描述 存储 Text 用于文本或文本与数字的组 ...

  8. 03_SQL server数据类型

    SQL server数据类型 String类型: 数据类型: 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符.定义类型为char(5),那么就表示该类型可以存储5个字符,即使存 ...

  9. SQL 用于各种数据库的数据类型(转载) sqlserver 数据类型 取值范围 长度

    SQL 用于各种数据库的数据类型 来源 http://www.runoob.com/sql/sql-datatypes.html    面向数据库编程中,数据类型的取值范围.长度,可能是需要经常查看的 ...

  10. MySQL 、SQL MS Access、和 SQL Server 数据类型

    MySQL 数据类型 在 MySQL 中,有三种主要的类型:Text(文本).Number(数字)和 Date/Time(日期/时间)类型. Text 类型: 数据类型 描述 CHAR(size) 保 ...

随机推荐

  1. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  2. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  3. 前端学HTTP之Web主机托管

    前面的话 对内容资源的存储.协调以及管理的职责统称为Web主机托管.主机托管是Web服务器的主要功能之一.保存并提供内容,记录对内容的访问以及管理内容都离不开服务器.如果不想自行管理服务器所需的软硬件 ...

  4. 【Web动画】SVG 实现复杂线条动画

    在上一篇文章中,我们初步实现了一些利用基本图形就能完成的线条动画: [Web动画]SVG 线条动画入门 当然,事物都是朝着熵增焓减的方向发展的,复杂线条也肯定比有序线条要多. 很多时候,我们无法人工去 ...

  5. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  6. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  7. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  8. 关于DDD的学习资料汇总

    DDD(Domain-Driven Design)领域驱动设计,第一次看到DDD是在学习ABP时,在其中的介绍中看到的.what,DDD是个什么鬼,我不是小白,是大白,没听过.于是乎,度娘查查查,找到 ...

  9. RabbitMQ + PHP (一)入门与安装

    RabbitMQ: 1.是实现AMQP(高级消息队列协议)的消息中间件的一种. 2.主要是为了实现系统之间的双向解耦而实现的.当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层.保存这个数 ...

  10. H3 BPM初次安装常见错误详解1-4

    错误1: 首次安装完成无法访问,效果如下. 错误原因:没有配置IIS. 解决方法: 控制面板-程序-打开或关闭Windows功能,选择internet信息服务. 因为安装的时候没有没有iis,所以程序 ...