У меня есть мнение, которое может содержать более чем одну строку, глядя, как это:SQL Server 2005 ВЫБРАТЬ TOP 1 из VIEW возвращает последнюю строку
[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
Но это ВСЕГДА возвращает LAST строку вида.
Фактически, если я просто запускаю подзадачу самостоятельно, я получаю только последнюю строку.
С 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
.. но может кто-то сказать мне, почему первая ведет себя так fudgely и как делать то, что я хочу? Как поясняется в комментариях, нет значимой колонки, по которой я могу сделать заказ. Могу ли я заставить порядок, в который вставлены строки, быть порядком, в котором они возвращаются?
[EDIT] Я также заметил, что: select top 1 rate from ([view definition select])
также возвращает правильное время значения и снова [/ EDIT]
Что вы определяете как 'last' row. Вы не заказываете свой результат. SQL Server не гарантирует, что заказ будет одинаковым при каждом выполнении запроса, таким образом, «TOP 1» может быть другой строкой каждый раз, когда вы выполняете запрос. – JodyT
, который перешел мне в голову, но он никогда не меняется, кроме как я заметил. Конечно, я предполагаю, что последняя строка, вставленная в таблицу, будет последней строкой, которая, возможно, не так? Но если все это верно, то вставка в таблицу temp должна быть такой же ненадежной. Я полагаю, что, вероятно, первое место влияет на оптимизатор, и он делает некоторые фанки упорядочения на основе таблиц и объединяется в самом представлении? Тем не менее, я ожидаю, что метод temp table будет таким же ненадежным. Все, что сказал, для меня нет возможности сортировать эти данные, чтобы подделать порядок вставки (нет PK, нет дат и т. Д.) – JoeBrockhaus
Если у вас нет столбцов (-ов) заказа, чтобы сообщить вам, какие из них были вставлены совсем недавно , откуда вы знаете, что он не возвращал неверные результаты в прошлом? – UnhandledExcepSean