【问题标题】:INSERT single quoted value for all column types in SQL Server为 SQL Server 中的所有列类型插入单引号值
【发布时间】:2015-06-18 03:31:55
【问题描述】:

假设你有一列 int(还有 bit 等)

CREATE TABLE TEST (a int)

用 '1' 或 2 插入值似乎无关紧要

INSERT INTO TEST VALUES ('1')
INSERT INTO TEST VALUES (2)

如果我通过单引号(例如“值”)为任何列类型插入/更新值,是否有任何副作用?

【问题讨论】:

  • 使用合适的类型(很明显)
  • @MitchWheat 没有回答我的问题
  • 您是在询问隐式类型转换的成本吗?
  • @MitchWheat 但我问的是“副作用”,而不是最佳实践!?
  • @MitchWheat 同意不同意

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012


【解决方案1】:

SQL Server 将根据联机丛书https://msdn.microsoft.com/en-us/library/ms190309.aspx 中记录的数据类型优先规则隐式转换数据类型。整数具有更高的优先级,因此在您的示例中字符串文字将被转换为整数。缺点是 SQL Server 需要做更多的工作,但开销可能并不大。

但是,请注意 JOINWHERE 子句中表达式的隐式转换。如果比较列已编入索引且优先级较低,则无法有效使用索引,可能需要进行扫描。这是 Unicode 文字/参数和 varchar 列的常见问题。

最好匹配类型以获得最佳性能并避免歧义。

【讨论】:

  • 谢谢 Dan,我只会在简单的 INSERT 中使用它,所以在这种情况下我会做得很好。喜欢你详细的回答。选了你的。
【解决方案2】:

好问题。这只是不好的做法。如果您不使用 mysql,另一个 db 肯定会对您大喊大叫,您会感到困惑。另外,我在想,如果您加载了更大的数据集,它可能会更慢,因为必须在幕后进行解析。

【讨论】:

  • 对不起米奇。眼睛越来越累了。
猜你喜欢
  • 2019-07-20
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2013-03-24
  • 2021-12-03
  • 2016-02-16
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多