转换/转换错误,NVARCHAR转换为INT

时间:2013-10-18 21:08:03

标签: sql-server-2008-r2 type-conversion

我正在使用SQLServer 2008 R2。我有两个表,第一个是属性表。第二个有一个引用属性表的列。这两个表使用varchar(32)列连接。

#tblA                              #tblB
---------------------              ---------------------
attrib varchar(32)    <--------->  attrib varchar(32)
val nvarchar(255)                  [other fields]
[other fields]

查询加入表并将#tblA.val强制转换为int

create table #tblA (attrib varchar(32), val nvarchar(255) /*, other fields */)
insert into #tblA values ('vase', 'red'), ('x', '323'), ('y', '615')

create table #tblB (attrib varchar(32) /*, other fields */)
insert into #tblB values ('x'), ('y')

select b.*, cast(a.val as int) as int_val
from   #tblA a inner join #tblB b on a.attrib = b.attrib

drop table #tblB, #tblA

此示例有效:

attrib                           int_val
-------------------------------- -----------
x                                323
y                                615

但是,当我对包含数千条记录的生产表运行相同的查询时,我收到错误:转换nvarchar值时转换失败&#39;花瓶&#39;数据类型为int。

如果我从生产查询中删除cast(),我可以看到列val的返回数据只包含整数值。

为什么SQL Server会尝试转换不属于返回数据集的值?更奇怪的是,除了a.val之外,如果我在选择列表中包含cast(a.val as int),则没有转换错误。谁看过这个吗?它只是SQL Server中的一个错误吗?

BTW - 使用convert(int, a.val)cast(a.val as int)存在同样的问题。

1 个答案:

答案 0 :(得分:0)

我认为这与您的问题有关。请检查接受的答案。它不是SQL Server错误。这是因为操作顺序不是程序性的(对大多数人来说这不是很明显)。

Cast Order in SQL Server Join

希望这有帮助。