我有一个观点:
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 :(得分:6)
问题出在这个任务上:
o.ID = v.STRINGVALUE
请更正它,它将解决问题。解决问题的一种可能方法是使用ISNUMERIC,例如
o.ID = CASE WHEN ISNUMERIC(v.STRINGVALUE) = 1 THEN v.STRINGVALUE ELSE -1 END
(在ELSE中你可以使用其他一些保证不与表'o'连接的数字,即你可以使用0)
答案 1 :(得分:3)
此错误表示您有一些nvarchar
类型的列,并且您尝试转换为数值(例如int)。
BUT 至少在返回的行中,该值不能转换为数字。
例如 - 尝试将“abcd”转换为数字会引发该错误。
在您提供的查询中,可能就在行CAST (ji.issuetype AS INT) AS issuetype
检查ji.issuetype
中的任何数据是否不是数字的字符串表示......
答案 2 :(得分:1)
您可以尝试的另一件事是使用ARITHABORT
告诉SQL只是它无法转换的NULL值。
例如,使用SET ARITHABORT OFF
&在从视图中进行选择之前SET ANSI_WARNINGS OFF
应该为NULL无法投射的值(而不是抛出异常) - 然后你可以看到哪些行(反过来是什么值)让你感到悲伤。