2013-01-10 81 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,则不能投的值(而不是抛出异常)之前 - 然后就可以看到哪些行(进而是什么值)是给你的悲痛。

相关问题