2011-05-10 58 views
0

我在存储过程中遇到了一些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 

谢谢!!

+0

我声明我的变量上面的查询。 \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

+4

它以什么方式不起作用?你期望它做什么?你是否期望它设置变量,尽管你没有在查询中设置变量? – Guffa 2011-05-10 15:37:27

+0

唯一的区别似乎是你没有分配第二个查询中的变量;所以如果这就是你想要发生的事情,那么你需要使用第一个查询......我错过了什么? – Jaymz 2011-05-10 15:38:53

回答

0

家伙您好,我必须要戴眼镜。

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年内没有用过它。所以谢谢你的想法。

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 
+0

你不需要光标就可以了 - 只需简单地设置变量(比如OP的说明)就足够好了,因为他只选择TOP 1 – 2011-05-10 15:45:08

+0

@MR:我知道,但我告诉他有两种可能性。 – CristiC 2011-05-11 07:28:27

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