2014-11-14 3 views
0

안녕하세요 저는 col1/sum2를 계산할보기를 만들었습니다. col1에는 미리 정의 된 값 100150455060 및 NA가 포함되어 있습니다. col1의 데이터 유형은 varchar이고 col2의 데이터 유형은 numeric입니다. 나는 COL1 그러나 내가내 응용 프로그램에서 데이터 형식 varchar를 숫자로 변환하는 중 오류가 발생했습니다.

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, 
 
\t \t A.PROD_BLOCK,   
 
     A.ELEVATION, 
 
     A.MATERIAL_TYPE, 
 
\t  A.SAMPLE_COUNT, 
 
\t  A.QC_SAMPLE_COUNT, 
 
\t \t A.TRUCK_CAPACITY, 
 
\t \t A.CONTENT, 
 
\t \t A.Valuegt AS GRAMS_PER_BLOCK, 
 
\t \t A.DATE_DISPACTHED as DATE_DISPATCHED   
 
\t \t 
 
FROM (SELECT RP.PROD_BLOCK, 
 
\t \t \t MIN(RP.ELEVATION) AS ELEVATION, 
 
\t \t \t MAX(RP.MATERIAL_TYPE)AS MATERIAL_TYPE, 
 
\t \t \t MAX(RP.DATE_DISPACTHED) AS DATE_DISPACTHED, 
 
\t \t \t SUM(CAST (RP.TRUCK_CAPACITY AS varchar(8))) AS TRUCK_CAPACITY, 
 
\t \t \t SUM(RP.CONTENT) AS CONTENT, 
 
\t \t \t (SUM(CAST(RP.TRUCK_CAPACITY AS varchar(8)))/SUM(RP.CONTENT)) AS Valuegt, 
 
\t \t \t (SELECT COUNT(DD.SAMPLE_ID) FROM ROM_PAD_DATA DD WHERE DD.PROD_BLOCK = RP.PROD_BLOCK) AS SAMPLE_COUNT, 
 
\t \t \t (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 
 
\t \t FROM ROM_PAD_DATA RP 
 
\t \t WHERE RP.TRUCK_CAPACITY <> 'NA' 
 
\t \t GROUP BY RP.PROD_BLOCK) A 
 
\t \t 
 
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

"오류가 숫자 데이터 유형 변환"응용 프로그램 측에서이 오류가 계속 'NA'의 값이있는 경우 내 문에 조건이 어떤 계산을 수행하지 않도록 설정
+0

이 오류는'WHERE RP.TRUCK_CAPACITY <> 'NA ''에 있습니다.이 검사를'WHERE CAST (RP.TRUCK_CAPACITY AS NVARCHAR) <>'NA ''로 바꾸어보십시오. –

답변

0

은 당신의 WHERE RP.TRUCK_CAPACITY <> 'NA' 조건을 바꾸기 :이 오류가 발생합니다 다른 데이터 유형의

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

비교,이 SCE에 대한 우리는 명시 적으로 RP.TRUCK_CAPACITY의 값을 문자열로 변환해야합니다.

+0

감사합니다. –

+0

@BethuelMhlongo StackOverflow의 정신에서는 해결 방법이 제대로 작동하면 upvote/marks라는 답을 잊어서는 안되며, 다른 이가 동일한 문제를 겪는다면 다른 사람들이이를 해결하는 방법을 알게 될 것입니다. –

+1

[걷는 습관이 좋지 않음 : (길이)없이 VARCHAR 선언] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length .aspx) - ** 항상 ** (n) varchar 변수와 매개 변수 (당신이'CAST' 나'CONVERT' 문에서 사용할 때 포함)를 제공해야합니다 ** –

관련 문제