如果我跑
select '1' + '1'
结果是11,因为我已经将文本添加到另一个。
如果我跑
select 1 + '1'
结果是2.我假设因为第一个操作数的类型而选择算术运算符而不是连接符。如果我的推理有效,那么
的结果select '1' + 1
将是11.但相反,它是2.因此,似乎运算符+被尝试用作算术运算符,如果两个操作数都不是算术运算符,则继续运行到下一个运算符。如果这是真的,那就可以解释为什么我会得到
的错误当我运行将varchar值'customer_'转换为数据类型时转换失败 中间体
customer_<somenumber>
时,而不是select and had 'customer_' + <somenumber>
。
长话短说:我认为我发现算术+
优于SQL Server连接的意义。我对吗?如果是这样,这种行为是否有官方原因?
答案 0 :(得分:3)
您遇到的问题是data type precedence。 SQL Server在数字后查找字符数据类型。因此,无论操作数的顺序如何(1 + '1'
vs '1' + 1
),它都会尝试将您的类型转换为数字并成功。
第二次尝试也是如此 - 它试图将字符串customer_
转换为整数,因为你正在使用算术运算符和整数。
答案 1 :(得分:2)
是的,与串联相比,优先级是算术。
https://msdn.microsoft.com/en-us/library/ms190276.aspx
正如您所知,您的错误是因为它不会隐式尝试将INT转换为VARCHAR