我在存储过程中遇到一些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
谢谢!
答案 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年内没有用过多少。所以感谢您的想法。