我有一个可能包含多行的视图,如下所示:
[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 名仍然是最后一名。德普?!?
这有效..
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])
也一次又一次地返回正确的值。[/编辑]