【发布时间】:2011-09-30 01:38:20
【问题描述】:
正如标题所示: 有没有办法在 SQL Server 中关闭隐式类型转换?
我希望下面的简单 SQL 生成错误
SELECT 'a' WHERE 1='1'
【问题讨论】:
-
好问题,除了:为什么重要?经过十秒钟的思考,我想不出一个我会不小心比较两种不同类型的例子,但如果我是故意比较两种不同的类型,那么我想要转换...
-
我认为这很重要,原因有很多。其中你提到的那个:偶然比较。我认为在给定字段的表中有一个用户定义的类型可能是一个键并且在另一个表中有一个外键会很好。我认为默认值应该是比较两个值时的 - 如果类型类型不同:失败。
-
这是标准 SQL 的一个特性,Chris Date 将其归功于他的朋友 E. F. Codd,其想法是“有时用户会比 DBMS 知道的更多”。但 Date 认为这是一个误判:谷歌确切的短语 `"Codd-style domain checks" 了解更多详情。
-
隐式类型转换会导致一些看起来很奇怪的错误。假设表 foo 有列 c 是 char 类型。然后
select * from foo where c = 123将导致奇怪的错误Conversion failed when converting the varchar value 'ABC' to data type int.在我的查询中我没有要求将“ABC”转换为任何东西;相反,这个值在某处的 c 列中。如果 MSSQL 会在列类型为 char 时警告我我指定了一个 int 会更有帮助。
标签: sql sql-server