2013-01-10 82 views
5

我有一個觀點:錯誤轉換數據類型爲nvarchar到數字鑑於

SELECT 
u.display_name AS usuario, 
g.parent_name AS grupo, 
pr.pkey, 
REPLACE(
    CONVERT (VARCHAR, ji.CREATED, 111), 
    '/', 
    '-' 
) AS fecha, 
CAST (ji.issuetype AS INT) AS issuetype, 
a.customvalue AS aplicativo, 
m.customvalue AS modulo 
FROM 
jiraissue AS ji 
JOIN project pr ON pr.ID = ji.PROJECT 
JOIN (
SELECT 
    ms.* 
FROM 
    cwd_membership ms 
INNER JOIN cwd_group gp ON (
    gp.ID = ms.parent_id 
    AND group_name IN (
     'Grupo QA 1', 
     'Grupo QA 2', 
     'Grupo QA 3', 
     'BH Seguros Homo' 
    ) 
) 
) g ON g.lower_child_name = ji.REPORTER 
JOIN cwd_user u ON g.lower_child_name = u.user_name 
JOIN (
SELECT 
    ISSUE, 
    customvalue 
FROM 
    customfieldvalue v 
INNER JOIN customfield f ON (
    f.ID = v.customfield 
    AND f.cfname = 'Aplicativo' 
) 
INNER JOIN customfieldoption o ON (o.ID = v.STRINGVALUE) 
) a ON (a.ISSUE = ji.ID) 
JOIN (
SELECT 
    ISSUE, 
    customvalue 
FROM 
    customfieldvalue v 
INNER JOIN customfield f ON (
    f.ID = v.customfield 
    AND f.cfname = 'Módulo' 
) 
INNER JOIN customfieldoption o ON (o.ID = v.STRINGVALUE) 
) m ON (m.ISSUE = ji.ID) 
WHERE 
ji.issuetype IN (9, 11, 12, 13, 14, 15) 
GROUP BY 
ji.issuetype, 
pr.pkey, 
g.parent_name, 
u.display_name, 
REPLACE(
    CONVERT (VARCHAR, ji.CREATED, 111), 
    '/', 
    '-' 
), 
a.customvalue, 
m.customvalue 

而這給了我這樣的事情:

usuario    grupo  pkey  fecha  issuetype aplicativo 
---------------------------------------------------------------------------------- 
Ricardo A. Casares Grupo QA 1 GD123 2012-11-23 12 Act-creditos-scheduler ABM_Suc-backend 

然後,當我試圖查詢這個觀點,比方說,一個簡單的查詢:

SELECT * FROM view 
WHERE pkey LIKE '%GD123%' 

在一些列我得到「錯誤轉換數據類型爲nvarchar以數字」 但在其他一些列中,如「aplicativo」它工作正常。

這是怎麼發生的?

+0

當你對pkey運行上述查詢時,你何時會收到錯誤?如果不是,哪個查詢返回該錯誤? – sgeddes

+1

什麼類型的jiraissue.issuetype? –

+0

@ user1073631 yes on pkey – ricardocasares

回答

6

問題是與這個任務:

o.ID = v.STRINGVALUE 

請糾正它,它將解決問題。解決該問題的一種可能方法是使用ISNUMERIC,例如,

o.ID = CASE WHEN ISNUMERIC(v.STRINGVALUE) = 1 THEN v.STRINGVALUE ELSE -1 END 

(在其他你可以使用這是保證與表中沒有加入一些其他數量的「o」,即您可以用0)

+0

OP聲明他沒有任何問題鑄造'ji.issuetype'列 – Blachshma

+0

所以,它必須是o.ID = v.STRINGVALUE是罪魁禍首 – cha

+1

或者,它可能是這樣的:ji.issuetype IN(9,11 ,12,13,14,15)。你能評論這條線並重新測試嗎? – cha

3

此錯誤表示您有一些類型爲nvarchar的列,並且您正在嘗試進行數值轉換(例如,int)。
但是至少在返回的行中,該值不能轉換爲數字。

例如 - 試圖將「abcd」轉換爲數字會引發該錯誤。

在你提供它的查詢可能是上線:CAST (ji.issuetype AS INT) AS issuetype

檢查是否有在ji.issuetype數據不是數字的字符串表示形式...

+0

mm,實際上jiraissue.issuetype的所有行都是數字的字符串表示。 – ricardocasares

+0

是的,沒有錯誤! – ricardocasares

1

你可以嘗試的另一件事是使用ARITHABORT告訴SQL只是NULL值,它無法投射。

例如,使用SET ARITHABORT OFF & SET ANSI_WARNINGS OFF從視圖中選擇應爲null,則不能投的值(而不是拋出異常)之前 - 然後就可以看到哪些行(進而是什麼值)是給你的悲痛。

相關問題