首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL静默地将int转换为varchar,但在遇到varchar时抛出一个错误?

SQL静默地将int转换为varchar,但在遇到varchar时抛出一个错误?
EN

Stack Overflow用户
提问于 2016-12-09 00:17:10
回答 1查看 459关注 0票数 6

最近,我在一个SQL脚本中遇到了一个问题,一个insert语句(即插入多个行)有一个类型为varchar(10)的列,它插入的数据行正在ints中传递。

但是,当我添加了要插入的新数据行,并在varchar列中使用varchar时,SQL试图将其转换为int,尽管该列的类型为varchar(10)。

下面是一个可以在本地运行的示例。

代码语言:javascript
复制
CREATE TABLE dbo.TestTable
    (
    VarcharColumn varchar(10) NOT NULL
    )  ON [PRIMARY]

insert into TestTable(VarcharColumn)
Values (1)

当您运行它时,它插入得很好,SQL必须在幕后默默地将该整数值转换为varchar。

但是,如果您尝试这样做:

代码语言:javascript
复制
insert into TestTable(VarcharColumn)
Values (1),(2),('Hello')

SQL将引发以下错误:

将varchar值“Hello”转换为数据类型int时,转换失败。

在这种情况下,有人能解释一下SQL的内部工作原理吗?具体地说:

  1. 为什么SQL允许将整数插入varchar列
  2. 为什么当SQL静默地转换这些值时,如果它运行在实际的varchar中,它将尝试将其转换为int。

我知道如何解决这个问题,以及如何从一开始就避免这个问题,但我想知道为什么SQL是这样工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 00:26:22

事情就是这样发生的。当Server运行时,它会遍历行

代码语言:javascript
复制
 (1),(2),('Hello')

并意识到那里有多个数据类型。因此,它将其转换为具有最高优先级的(int )。

所以你才会犯这个错误。

请参阅有关数据类型优先级的更多信息

https://msdn.microsoft.com/en-us/library/ms190309.aspx

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41051122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档