SQL Server + 操作符 容易忽略的陷阱
在SQL Server中,常用 + 用于字符串的联结,最近在同事编写一个SQL脚本时,使用到 + 作为字符串的拼接,却发生以下错误:从数据类型 varchar 转换为 bigint 时出错。
脚本如下:
Declare @Org bigint; declare @Sql nvarchar(1000); set @Org=1001507247175004 set @Sql='select top 1 * from MRP_PlanName where Org=' + @Org exec(@Sql)
单独执行脚本:
select top 1 * from MRP_PlanName where Org=1001507247175004
查询结果正常。
后续简单检查之后,才反应过来,+ 操作符的使用中,并不是按照关心思维中的,直接将变量 @org 的值转换为字符串,然后拼接的
SQL Server中 操作符 + 的使用:
1、算术运算符 两个数值类型的加法原酸数学计算
2、连接运算符 字符串串联运算符,可以将两个或两个以上字符串合并成一个字符串
3、当(+)作为连接运算符时,多用于将两个字符串连接合并为一个字符串,需注意以下:
3.1 当有一个操作数是数值型时,会尝试将其他操作数转换为数值型,如果转换成功,则进行加和运算;如果转换失败,则数据库抛错
3.2 当有一个操作数是NULL时,结果返回NULL