INSERT SQL Server中所有列类型的单引号值

时间:2015-06-18 03:31:56

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

假设您有一列int(也是位等)

CREATE TABLE TEST (a int)

如果您使用'1'或2

插入值似乎无关紧要
INSERT INTO TEST VALUES ('1')
INSERT INTO TEST VALUES (2)

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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