2016-10-12 130 views
-2

私は以下のクエリを実行しています。クエリでは、ChIDはCatテーブルのカラムではありません。そのために、私は0をChIDとして配置し、それをbigintデータ型に変換して、CatAttの列のデータ型と一致させます。私は、Oracle関連の変更とともにOracleに類似したクエリを実行していると私は結果を得たvarcharをbigintに変換中にエラーが発生しました

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to bigint.

:しかし、私は次のエラーを取得しています。

WITH rg (ID, ChID, Name) AS 
(
    SELECT 
     ID, 
     CAST(0 AS bigint) ChID, 
     Name 
    FROM Cat 
    WHERE ID = 1000 

    UNION ALL 

    SELECT 
     c.ID, 
     c.ChID, 
     k.Name 
    FROM CatAtt c 
    JOIN rg p ON (c.ChID = p.ID) 
    JOIN Cat k ON (c.ID = k.ID) 
) 
SELECT DISTINCT 
    ka.ID 
FROM 
    rg, Parent app 
JOIN 
    Cat ka ON (ka.ID = app.UserIdentifier) 
JOIN 
    Owner dt ON (dt.ID = app.ID) 
WHERE 
    app.ID = 25773 
    AND app.aprroved = 0 
    AND REPLACE(ka.Name, ka.Type + '_', dt.OwnerID + '_') = rg.Name 
+0

試し 'CatAtt.ChID'のですか?それは問題のある人かもしれません。 –

+0

CatAtt.ChIDのデータ型はbigintです。 – Pathan

+0

ジョインの1つに数値ではない「VARCHAR」値があります。私は 'app.UserIdentifier'を推測しています。あなたはSQL Server 2012+のために 'TRY_CONVERT()'を使ってどちらを購入するかを知ることができます。そうでなければ、ISNUMERICはあなたがそれをうまく理解しなければiffyなので、少し深く掘り下げなければなりません。 'TRY_CONVERT(bigint、UserIdentifier)がnullの場合、親からUserIdentifierを選択してください。 ' – scsimon

答えて

-1

どのようなデータ型の変換の代わりに、キャスト

WITH rg (ID, ChID, Name) AS 
(
SELECT 
    ID, 
    CONVERT(bigint , '0') ChID, 
    Name 
FROM Cat 
WHERE ID = 1000 

UNION ALL 

SELECT 
    c.ID, 
    c.ChID, 
    k.Name 
FROM CatAtt c 
JOIN rg p ON (c.ChID = p.ID) 
JOIN Cat k ON (c.ID = k.ID) 
) 
SELECT DISTINCT 
ka.ID 
FROM 
rg, Parent app 
JOIN 
Cat ka ON (ka.ID = app.UserIdentifier) 
JOIN 
Owner dt ON (dt.ID = app.ID) 
WHERE 
app.ID = 25773 
AND app.aprroved = 0 
AND REPLACE(ka.Name, cast((ka.Type) as nvarchar(max)) + '_', cast((dt.OwnerID as nvarchar(max)) + '_')) = rg.Name 
+1

この違いが生じると思われる理由を説明できますか?エラーメッセージは、varcharをbigintに変換することです。 –

+0

だから、 "convert(bigint、 '0')chID"は0からbigintに変換されると思います。 – Ashu

+0

ええ、もう一度検証して、エラーが置換メソッドにあることがわかりました。ここで、ka.Nameはnvarcharで、nullではありません。型がbigintで、nullでない場合、dt.owneridはbigintであり、nullではありません。 oracleでは、構文は "REPLACE(ka.Name、ka.Type || '_'、dt.ownerid || '_')= rg.Name"となり、結果が得られました。 Replaceメソッドを削除してSQLを検証して実行したところ、結果が表示され、条件を保持するとエラーが発生しています。 – Pathan

関連する問題