ORDER BY在SELECT语句中不起作用

时间:2011-05-10 15:31:50

标签: sql sql-server sql-order-by

我在存储过程中遇到一些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 个答案:

答案 0 :(得分:1)

我没看到你的第二个查询有什么问题。如果您想稍后使用结果,可以使用第一个查询或使用声明游标:

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

答案 1 :(得分:0)

你的第一个查询似乎是正确的 - 第二个查询实际上并没有设置变量,所以你只需要将变量放在那里......


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

答案 2 :(得分:0)

大家好,我一定要戴眼镜。

选择

TOP 1

@firstname = [sample_donor_firstname],

@lastname = [sample_donor_lasttname],

@middlename = [sample_donor_middlename]

FROM dbo。[ws_test_request]

WHERE

[client_id] = @clientid

AND [sample_specimen_id] = @sample_identifyingnumber; - < =============坏!!

ORDER BY dbo。[ws_test_request] .created DESC

当我使用“2011051001”值测试时,我已将@sample_identifyingnumber设置为“2011051001”,尽管我仍然使用了分号。这就是导致我的ORDER BY子句失败的原因,并得到红色下划线。在我的问题中,我的代码没有任何问题。但感谢使用游标的想法!我在大学里学过SQL,但在5年内没有用过多少。所以感谢您的想法。