gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:05:20 26 4
gpt4 key购买 nike

我最近在 SQL 脚本中遇到一个问题,其中插入语句(插入多行)有一个 varchar(10) 类型的列,并且它插入的数据行以整数形式传递。

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

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

CREATE TABLE dbo.TestTable
(
VarcharColumn varchar(10) NOT NULL
) ON [PRIMARY]

insert into TestTable(VarcharColumn)
Values (1)

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

但是如果你尝试这样做:

insert into TestTable(VarcharColumn)
Values (1),(2),('Hello')

SQL 将抛出以下错误:

Conversion failed when converting the varchar value 'Hello' to data type int.

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

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

我首先了解如何解决此问题以及如何避免它,但我正在寻找有关 SQL 为何如此工作的解释。

最佳答案

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

 (1),(2),('Hello')

并意识到那里有不止一种数据类型。因此它将其转换为具有最高优先级的(int 与 varchar)。

这就是您收到错误的原因。

在此处查看有关数据类型优先级的更多信息

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

关于SQL 默默地将 int 转换为 varchar,但在遇到 varchar 时抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41051122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com