zoukankan      html  css  js  c++  java
  • 特殊的数据类型: bit、sql_variant、sysname

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

  • 相关阅读:
    【转贴】Render to Texture(渲染到纹理)
    【转贴】EffectFramework
    真正的电脑高手
    【ZT】剑道与编程之道
    【转贴】DXUT 框架入门 2
    【转贴】DXUT 框架函数介绍
    第四章 治病法要(1)
    第一章 略说中医的学习与研究(5)
    第二章 伤寒之意义(2)
    第一章 略说中医的学习与研究(4)
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5144774.html
Copyright © 2011-2022 走看看