ORDER BY在SELECT语句中不起作用
我在存储过程中遇到了一些SQL语法问题。我正在从SQL表中检索最近一行(在SQL Server Management Studio中),并稍后在我的存储过程中使用它。这就是为什么我设置变量(即:@firstname, @lastname
等)。我只对基于dbo.[ws_test_request].CREATED
列值的最新行感兴趣。我需要根据查询的数据设置变量,所以我需要得到“这不起作用”查询工作。ORDER BY在SELECT语句中不起作用
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
谢谢!!
家伙您好,我必须要戴眼镜。
SELECT
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年内没有用过它。所以谢谢你的想法。
我没有看到你的第二个查询有什么问题。如果你想使用一个稍后的结果,你可以用你的第一个查询,或者使用声明游标:
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
你不需要光标就可以了 - 只需简单地设置变量(比如OP的说明)就足够好了,因为他只选择TOP 1 – 2011-05-10 15:45:08
@MR:我知道,但我告诉他有两种可能性。 – CristiC 2011-05-11 07:28:27
第一个查询似乎是正确的 - 第二个查询实际上并没有设置变量,所以你只需要把变量在那里...
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
我声明我的变量上面的查询。 \t DECLARE \t \t @donorid INT, \t \t @firstName NVARCHAR(255), \t \t @LastName NVARCHAR(255), \t \t @identifyingnumber NVARCHAR(255), - SSN/MRN \t \t @ middlename NVARCHAR(255), \t \t @comment NVARCHAR(1023); – MacGyver 2011-05-10 15:33:00
它以什么方式不起作用?你期望它做什么?你是否期望它设置变量,尽管你没有在查询中设置变量? – Guffa 2011-05-10 15:37:27
唯一的区别似乎是你没有分配第二个查询中的变量;所以如果这就是你想要发生的事情,那么你需要使用第一个查询......我错过了什么? – Jaymz 2011-05-10 15:38:53