在SQL
Server平时的函数、存款和储蓄进度和SQL语句中,日常会选拔差异数据类型的转变。在SQL
Server有三种多少转变类型:1种是显性数据转变;另壹种是隐性数据转变。下边分别对那三种数据类型转换进行简短的证实:

一 显式转变

展现转变是将某种数据类型的表达式显式转变为另1种数据类型。常用的是CAST
和 CONVERT 函数。

 CAST: CAST ( expression AS data_type )
 CONVERT: CONVERT (data_4503.com,type[(length)], expression [, style])

参数 expression 是此外有效的 Microsoft SQL Server表达式。data_type
指标种类所提供的数据类型,无法选用用户定义的数据类型。

二 隐性转变

隐性调换对于用户是不可知的,由SQL Server 引擎自动处理。
隐性转换自动将数据从壹种数据类型转变来另1种数据类型。举例,假使三个smallint 变量和1个 int 变量相比较,这些 smallint
变量在可比前即被隐性调换来 int 变量。 当从四个 SQL Server
对象的数据类型向另叁个转变时,一些隐性和显式数据类型调换是不帮衬的。举例,nchar
数值根本就无法被转变到 image 数值。nchar 只好显式地转换成binary,隐性地改动成 binary 是不扶助的。nchar 能够显式地依然隐性地调换成nvarchar。

三 隐性转变的风险

隐性转变有的时候非常有利于,能够简化SQL
脚本,可是那中间也孕育着暧昧的高风险,只怕会现出在剧本一同头运营的时候都以通常的,但却某一个时间点之后,程序莫名出现错误。下边举三个有血有肉项目中的例子来表明。在SQL
Server
二〇〇玖中有五个表,供给从五个分歧的多寡表中拉取数据,由于那三个数据表属于差异的种类,其主键类型是见仁见智的,一个是int类型,2个是GUID,一开首想着那八个都可以转变到字符类型举办仓储。所以就在表中国建筑工程总集团立1个nvarchar(50)的混合ID列作为主键。如下图所示:

4503.com 1

一开头拉取的多少尚没有GUID的值,都是INT类型转变过来的多寡,所以SQL脚本运维的正规,不过忽然某3回运转时,出现了“在将
nvarchar 值 ‘4C185367-F00肆-4一FE-8A0A-DB四E81玖B一FF2’ 调换来数据类型 int
时失败。”的失实。如下图所示:

4503.com 2

一向到剧本,执行的SQL如下:

select * from dbo.Demo where
混合ID=305

中间主键中的数据有GUID转变的字符型,也是有INT调换的字符串,示例数据如下:

4503.com 3

唯独假使实行下边包车型客车SQL,则都以常规实行:

select * from dbo.Demo where 混合ID=305 and 名称='INT'

select * from dbo.Demo where 混合ID=305 and 序号='2'

select * from dbo.Demo where 混合ID=305 and 序号=2

select * from dbo.Demo where 混合ID='305' and 名称='INT'

select * from dbo.Demo where 混合ID='305'

结果如下:

4503.com 4

并发上述荒唐的结果应该是如此的:

select * from dbo.Demo where 混合ID=305在奉行时,SQL
Server会将nvarchar类型的隐性调换来int类型,假诺数量中从未GUID类型的字符,则转移正常,假诺有,当进行GUID字符到INT的隐性调换时,则转移失利。

4503.com 5

上述正是本文的全部内容,希望对大家张开SQL Server数据类型调换有所帮衬。

你或然感兴趣的小说:

  • 详解SQL Server中的数据类型
  • 详解MySQL数据类型int(M)中M的意思
  • mysql存款和储蓄引擎和数据类型(2)
  • Java数据类型与MySql数据类型对照表
  • SQL
    Server相比普及数据类型详解
  • SQLite教程(7):数据类型详解
  • SQL
    Server数据类型char、nchar、varchar、nvarchar的界别浅析
  • sql使用cast实行数据类型转变示例
  • SQL二〇〇五中char nchar varchar
    nvarchar数据类型的区分和使用情状批注
  • SQL的常用数据类型列表详解