私は見解を持っています:
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」などの他の一部の列では正常に機能しています。
なんでこんなことが起こっているの?
問題はこの割り当てにあります:
o.ID = v.STRINGVALUE
修正してください。問題は解決します。問題を修正するための可能な方法は、ISNUMERICを使用することです。
o.ID = CASE WHEN ISNUMERIC(v.STRINGVALUE) = 1 THEN v.STRINGVALUE ELSE -1 END
(ELSEでは、テーブル 'o'と結合しないことが保証されている他の番号を使用できます。つまり、0を使用できます)
このエラーは、タイプがnvarchar
の列があり、数値(たとえば、int)に変換しようとしていることを意味します。
[〜#〜] but [〜#〜]少なくとも返された行では、その値を数値に変換することはできません。
たとえば、「abcd」を数値に変換しようとすると、そのエラーが発生します。
指定したクエリでは、おそらく次の行にあります:CAST (ji.issuetype AS INT) AS issuetype
ji.issuetype
のデータのいずれかが数値の文字列表現ではないかどうかを確認してください...
もう1つ試すことができるのは、ARITHABORT
を使用して、SQLにキャストできないNULL値だけを指示することです。
たとえば、ビューから選択する前にSET ARITHABORT OFF
&SET ANSI_WARNINGS OFF
を使用すると、(例外をスローする代わりに)キャストに失敗した値をNULLにする必要があります。これにより、どの行(次にどの値)が提供されているかを確認できます。あなたは悲しみます。