将数据类型varchar从我的应用程序转换为数字时出错

时间:2014-11-14 08:23:56

标签: sql-server

您好我创建了一个计算总和col1 / sum col2的视图 但是col1包含预定义值100,150,45,50,60和NA。 col1的数据类型是varchar,col2的数据类型是数字。我已经在我的声明中设置了一个条件,如果col1的值为'NA',则不执行任何计算但是我不断从应用程序端获得此错误“将数据类型转换为数字时出错”

IF EXISTS(SELECT * FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'ROM_PAD_REPORT') AND XTYPE = 'V')
DROP VIEW ROM_PAD_REPORT
GO

CREATE VIEW [dbo].[ROM_PAD_REPORT]  
AS  



SELECT  DISTINCT CAST(NULL AS UNIQUEIDENTIFIER) AS PK,
        DTS.PK AS PPK,
		A.PROD_BLOCK,        
        A.ELEVATION,
        A.MATERIAL_TYPE,
	    A.SAMPLE_COUNT,
	    A.QC_SAMPLE_COUNT,
		A.TRUCK_CAPACITY,
		A.CONTENT,
		A.Valuegt AS GRAMS_PER_BLOCK,
		A.DATE_DISPACTHED as DATE_DISPATCHED         
		
FROM ( SELECT  RP.PROD_BLOCK,
			  MIN(RP.ELEVATION) AS ELEVATION,
			  MAX(RP.MATERIAL_TYPE)AS MATERIAL_TYPE,
			  MAX(RP.DATE_DISPACTHED) AS DATE_DISPACTHED,
			  SUM(CAST (RP.TRUCK_CAPACITY AS varchar(8))) AS TRUCK_CAPACITY,
			  SUM(RP.CONTENT) AS CONTENT,  
			  (SUM(CAST(RP.TRUCK_CAPACITY AS varchar(8)))/SUM(RP.CONTENT)) AS Valuegt,
			  (SELECT COUNT(DD.SAMPLE_ID) FROM ROM_PAD_DATA DD WHERE DD.PROD_BLOCK = RP.PROD_BLOCK) AS SAMPLE_COUNT,
			  (SELECT COUNT(DD.SAMPLE_ID) FROM ROM_PAD_DATA DD WHERE DD.PROD_BLOCK = RP.PROD_BLOCK and DD.SAMPLE_TYPE IN ('STD', 'BLANK')) AS QC_SAMPLE_COUNT
		FROM  ROM_PAD_DATA RP 
		WHERE RP.TRUCK_CAPACITY <> 'NA'
		GROUP BY RP.PROD_BLOCK) A
		
JOIN ROM_PAD_DATA B ON A.PROD_BLOCK = B.PROD_BLOCK
JOIN DATASET DTS ON (B.PPK = DTS.PK) 
JOIN BUS_UNIT BU ON (BU.PK = DTS.PPK)

GO
GRANT SELECT ON ROM_PAD_REPORT TO sableApp
GO

1 个答案:

答案 0 :(得分:0)

将您的WHERE RP.TRUCK_CAPACITY <> 'NA'条件替换为:

WHERE CAST(RP.TRUCK_CAPACITY AS NVARCHAR(MAX)) <> 'NA'

不同数据类型的比较将生成此错误,对于此方案,我们需要将RP.TRUCK_CAPACITY中的值显式转换为字符串。