0

私は以前ここで大きな助けを受けたので、誰かが私がこれを理解するのを手伝ってくれることを願っています。クエリ#1で「サブクエリが複数の値を返しました...」というエラーが発生するのにクエリ#2が正常に機能する理由を誰かに教えてもらえますか?結果を修飾するために「=」の代わりに「IN」を使用しているので、複数の値が許容できると思いました。

これを達成する方法について何か提案はありますか?

--Query #1
SELECT _Column1_ from _View1_
WHERE
_Column2_ IN( CASE
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3
THEN (
SELECT  _Column2_
FROM    _Table1_
WHERE   _Column2_ = CONVERT(Int, LEFT(1000110, 4))
OR      _Column3_ = CONVERT(Int, LEFT(1000110, 4))
)
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3
THEN 0
ELSE (SELECT _Column2_ from _Table1_)
END)

注:最後のクエリでは、1000110は実際には、数値のユーザー名または英数字を返すことができるユーザー名変数になります

--Query #2
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3
THEN CONVERT(Int, LEFT(1000110, 4))
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3
THEN 0
ELSE (SELECT _Column2_ from _Table1_)
END)
4

1 に答える 1

2

SELECT _Column2_ from _Table1_ほとんどの場合、複数の結果が返されます。このコンテキストでは、単一の値のみが許可されます。

テストとして試してみてくださいSELECT TOP(1) _Column2_ from _Table1_

于 2013-01-08T22:32:59.960 に答える