次のように、複数の行を含む可能性のあるビューがあります。
[rate] | [vendorID]
8374 1234
6523 4321
5234 9374
SPROC では、ビューの最初の行の最初の列の値に等しいパラメーターを設定する必要があります。このようなもの:
DECLARE @rate int;
SET @rate = (select top 1 rate from vendor_view where vendorID = 123)
SELECT @rate
しかし、これは常にビューの最後の行を返します。
実際、単に副選択を単独で実行すると、最後の行しか取得できません。
ビューに 3 行ある場合、TOP 2 は FIRST 行と THIRD 行を順番に返します。4行で、上位3つを順番に返しています。それでもトップ1は最後を返しています。DERP?!?
これは動作します..
DECLARE @rate int;
CREATE TABLE #temp (vRate int)
INSERT INTO #temp (vRate) (select rate from vendor_view where vendorID = 123)
SET @rate = (select top 1 vRate from #temp)
SELECT @rate
DROP TABLE #temp
..しかし、誰かが最初の動作が非常に曖昧である理由と、私が望むことを行う方法を教えてもらえますか? コメントで説明されているように、注文を行うための意味のある列はありません。行が挿入される順序を、返される順序にすることはできますか?
[編集] また、次のことにも気付きました:select top 1 rate from ([view definition select])
また、正しい値を何度も返します。[/編集]