2014-02-18 78 views
0

时转换失败我运行了这个查询,并且在标题中出现错误。我试图找出是否部分号码在products.specifications表退出部分号码被定义为一个products.specifications整数将nvarchar值'T-100-060'转换为数据类型int

Select products.Specifications.ProductID 
FROM Products.Products 
JOIN Products.Specifications 
ON  Products.Products.PartNumber = Products.Specifications.ProductID 
where ProductTypeID = '15' 

请帮助谢谢

+0

错误是不言自明的。您为什么不检查PartNumber和ProductID以获取您遇到错误的值。你应该习惯使用别名。 – Kermit

+0

显而易见,字符串值“T-100-060”不能转换为整数 - 整数是整数,整数不包含字母或破折号。如果'ProductID' *是一个整数,那么它与PartNumber不同。你的数据库没有按你认为的方式构建。您无法将'PartNumber'连接到'ProductID',而不是您可以'A JOIN B ON'Apple'= 23'。 – ErikE

回答

0

那么你可以投的数量为字符串:

Select products.Specifications.ProductID 
FROM Products.Products 
JOIN Products.Specifications 
ON  Products.Products.PartNumber = CONVERT(VARCHAR(10), Products.Specifications.ProductID) 
where ProductTypeID = '15' 

但随后你需要确定是否有任何边缘情况予以关注 - 空格,前导零等

我试图找出是否在products.specifications表中的部分号码退出

那么你应该使用IN

SELECT * 
FROM Products.Products 
WHERE PartNumber IN 
(
    SELECT CONVERT(VARCHAR(10), ProductID) 
    FROM Products.Specifications 
) 
AND ProductTypeID = '15' 

一个JOIN会给你复式的结果,如果partnumber多个记录相匹配在products.specifications

+0

和性能。这对于大型表格会很糟糕...... –

+0

如果在Products.Products.PartNumber上有一个索引,那应该不错。您还可以在字符串转换中添加索引以提高性能。如果两者属于同一类型,显然是最好的。 –

+0

事实上,您正在使用标量转换列将会大大降低性能。 –

相关问题