0

次の SQL ステートメントがあります。

WITH CTE(Col01,...,Col05) AS
(
    ...
)
SELECT   ....
        ,CASE ....
              WHEN ... THEN CASE ...
                                 WHEN 0 THEN ...
                                 ELSE (SELECT STUFF((SELECT ',' + CAST(Col002 AS NVARCHAR(10)) FROM TableOne WHERE Col05=CTE.Col05 FOR XML PATH('')),1, 1,''))
                            END
              WHEN ... THEN ...
              WHEN ... THEN ...
              ELSE ...
        END
        ,...
FROM TableOne 
CROSS APPLY CTE 
WHERE TableOne.Col01=CTE.Col01

列テーブル情報から CSV リストを返したい - 単独で実行するとステートメントは正しく機能しますが、上記の SQL ステートメント構文では次のエラーが発生します。

メッセージ 245、レベル 16、状態 1、行 1
nvarchar 値 '101,102,103,108,109,110,112,113,114,115,116,117,118,119,120,121,122,126,130,135,164,165,218' をデータ型 in に変換するときに、変換に失敗しました。

ステートメントを「1」または 1 だけに置き換えても、エラーは発生しません。CSV リストを int に変換しようとしているのはなぜですか?

4

1 に答える 1

0

クエリに関する詳細情報を提供しなかったことを本当に残念に思います。問題の原因を突き止めました。全体像を示さずに見つけるのは非常に困難です。

nvarcharとしてキャストすると、すべて可能な値が返されるため、この問題は修正されました。何らかの理由で、戻り値の1つがintである場合、SQLサーバーはすべての値もintとして変換しようとします。

このリンクは私の問題を解決するのに役立ちます:

http://www.fmsinc.com/free/newtips/sql/sqltip10.asp

編集:これは理にかなっていると思います-場合によっては異なる結果を得ることができます-whenステートメントですが、それらは1つのタイプである必要があります。

于 2012-08-15T08:18:03.397 に答える