T-SQL数据类型

精华
小牛编辑
153浏览
2023-03-14

SQL Server 中的数据类型是一个属性,它生成对象的数据。每个变量、列和表达式都与 T-SQL 中的数据类型相关。创建表时将根据需要为基于列的表选择特定的数据类型。

SQL Server 有七大类,包括多种数据类型。

精确数字类型

类型 最小值 最大值
Bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807
Int -2,147,483,648 2,147,483,647
Smallint -32,768 32,767
Tinyint 0 255
Bit 0 1
Decimal -10^38 +1 10^38 -1
Numeric -10^38 +1 10^38 -1
Money -922,337,203,685,477.5808 +922,337,203,685,477.5807
small money -214,748.3648 +214,748.3647

数字和小数是固定精度和小数位数的数据类型。

数字类型

类型 值范围
实数 -3.40E + 38 -3.40E + 38
浮点数 -1.79E + 308 -1.79E + 308

日期和时间类型

类型 值范围
datetime(3.3millisecondsaccuracy) 1753 年 1 月 1 日至 9999 年 12 月 31 日
smalldatetime(1 分钟精度) 1900 年 1 月 1 日至 2079 年 6 月 6 日
日期(1 天精度) 9999 年 1 月 1 日至 12 月 31 日
datetimeoffset(100 纳秒精度) 0001 年 1 月 1 日至 9999 年 12 月 31 日
datetime2(100 纳秒精度) 0001 年 1 月 1 日至 9999 年 12 月 31 日
时间(SQL Server 2008 中引入的 100 纳秒精度) 00:00:00.0000000 到 23:59:59.9999999

字符串

类型 描述
Char 非Unicode定长字符数据,长度为8000个字符。
varchar 非Unicode 变长数据,最大8000 个字符。
Varchar (max) 非Unicode变长数据,最大长度为231个字符。
text 它是一个非Unicode 数据,范围为2,147,483,647 个字符。

Unicode字符串

类型 说明
Nchar 定长数据,最大范围为4000个字符。
nvarchar 它是一种可变长度的Unicode 数据,最大长度为4,000 个字符。
Nvarchar(max) Nvarchar 是 230 个字符的可变长度(在 SQL Server 2005 中引入)。
Ntext 最大长度为 1,073,741,823 个字符,它是可变长度的。

二进制字符串

类型 说明
Binary Binary 是定长数据,最大长度为 8,000 字节。
Varbinary Varbinary 二进制数据使用长度为 8,000 字节。
Varbinary(max) Varbinary(max) 是可变长度的二进制数据,最大周期为 231 字节(在 SQL Server 2005 中引入)。
Image type Image type数据类型中,可变长度的二进制数据,最大长度为2,147,483,647字节。

T-SQL中使用的其他数据类型

  • Timestamp - 它存储了大量的数据库。每次更新一行时都会更新它。
  • Sql_variant - 存储大多数SQL服务器的值,支持除ntext和timestamp数据类型之外的数据类型。
  • Unique identifier —— 当它保存 XML 数据时,将 XML 实例存储在列中。
  • Table - 它保存一段时间后处理的结果集。
  • Cursor- 光标是一个参考。
  • Hierarchy - 数据类型是可变长度的,用于表示层次结构中的位置。

T-SQL中流量控制的关键词

它有 BEGINENDBREAKCONTINUEGOTOIF-ELSEWAITFORRETURNWHILE 关键字。
IFELSE允许条件执行。如果当前日期是周末日期,则批处理语句将打印“this is a weekend”,或者如果当前日期是工作日,则打印“this is a weekend weekday”。

注意:代码假定星期日是 @DATEFIRST 设置中一周的第一天。

IF DATEPART (DW, GETDATE ()) = 7 OR DATEPART (DW, GETDATE ()) = 1  
PRINT 'This is the weekend.' /if GETDATE =7 then  
ELSE  
PRINT 'This is a weekday.' /otherwise

流程控制中的 BEGINEND 生成语句块。