ORDER BY не работает в операторе SELECT - PullRequest
0 голосов
/ 10 мая 2011

У меня проблемы с синтаксисом SQL в хранимой процедуре. Я извлекаю самую последнюю строку из таблицы SQL (в SQL Server Management Studio ) и позже использую ее в своей хранимой процедуре. Вот почему я устанавливаю переменные (то есть: @firstname, @lastname и т. Д.). Меня интересует только самая последняя строка, основанная на значении столбца dbo.[ws_test_request].CREATED. Мне нужны переменные, основанные на запрашиваемых данных, поэтому мне нужно, чтобы запрос "Это не работает" работал.

PS: «2011051001» будет переменной ... Я просто пытаюсь заставить ее работать.

Это работает:

SELECT 
    TOP 1
    @firstname = [sample_donor_firstname],
    @lastname = [sample_donor_lasttname],
    @middlename = [sample_donor_middlename]
FROM dbo.[ws_test_request]
WHERE 
    [sample_specimen_id] = '2011051001'
ORDER BY dbo.[ws_test_request].created DESC

Это не работает:

SELECT 
    TOP 1
    [sample_donor_firstname],
    [sample_donor_lasttname],
    [sample_donor_middlename]
FROM dbo.[ws_test_request]
WHERE 
    [sample_specimen_id] = '2011051001'
ORDER BY dbo.[ws_test_request].created DESC

Спасибо !!

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Я не вижу ничего плохого в вашем втором запросе. Если вы хотите использовать результаты на более позднем этапе, вы можете использовать свой первый запрос или использовать объявление курсора:

DECLARE MyCursor CURSOR FOR
SELECT 
    TOP 1
    [sample_donor_firstname],
    [sample_donor_lasttname],
    [sample_donor_middlename]
FROM dbo.[ws_test_request]
WHERE 
    [sample_specimen_id] = '2011051001'
ORDER BY dbo.[ws_test_request].created DESC

, а затем открыть и получить результаты:

OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @firstname, @lastname, @middlename
0 голосов
/ 11 мая 2011

Привет, ребята, мне нужны очки.

SELECT

TOP 1

@ firstname = [sample_donor_firstname],

@ lastname = [sample_donor_lasttname],

@ middlename = [sample_donor_middlename]

ОТ dbo. [ws_test_request]

ГДЕ

[client_id] = @clientid

AND [sample_specimen_id] = @sample_identifyingnumber;- <============= ПЛОХОЙ !! </p>

ЗАКАЗАТЬ ПО dbo. [Ws_test_request] .created DESC

Когда я тестировал его сЗначение «2011051001», я установил @sample_identifyingnumber в «2011051001», хотя у меня все еще была точка с запятой.Вот почему мое предложение ORDER BY потерпело неудачу и стало красным подчеркиванием.В моем вопросе не было ничего плохого с моим кодом.Но спасибо за идеи использования курсоров!Я изучал SQL в колледже, но почти не использовал его в течение 5 лет.Так что спасибо за идеи.

0 голосов
/ 10 мая 2011

Ваш первый запрос кажется правильным - второй запрос на самом деле не устанавливает переменные, поэтому вам просто нужно поместить туда переменные ...


DECLARE @donorid INT, 
@firstname NVARCHAR(255), 
@lastname NVARCHAR(255), 
@identifyingnumber NVARCHAR(255), -- SSN/MRN 
@middlename NVARCHAR(255), 
@comment NVARCHAR(1023


SELECT       
TOP 1      
@firstname = [sample_donor_firstname],      
@lastname = [sample_donor_lasttname],      
@middlename = [sample_donor_middlename]  
FROM dbo.[ws_test_request]  
WHERE       
[sample_specimen_id] = '2011051001'  
ORDER BY dbo.[ws_test_request].created DESC 

-- and then select the results (or use them wherever else you want to use them)
Select @firstname as FirstName, @lastname as LastName, @middlename as MiddleName

...