我已经为数据库中的一项操作编写了此存储过程,但它提示出现两个错误。我相当新,最重要的是,如果有人能纠正这个错误,那将会很棒。尝试执行时存储过程中的语法错误
CREATE PROCEDURE findVersions
@seg nvarchar(255),
@str nvarchar(255)
AS
DECLARE @UnsegQuery AS nvarchar(255)
SET @UnsegQuery = SELECT DISTINCT UnsegmQuery
FROM tbData
WHERE SegQuery = @seg
SELECT TOP 1 Strategy, Versions, CGNum
FROM tbData
WHERE Strategy = @str
AND SegQuery = @seg
ORDER BY CGnum DESC
UNION
SELECT TOP 1 Strategy, Versions
FROM tbData
WHERE Strategy = 'BF'
AND UnsegmQuery = @UnsegQuery
UNION
SELECT Strategy, Versions
FROM (SELECT ROW_NUMBER() OVER (ORDER BY nDCG DESC) AS rownumber
FROM tbData) AS foo
WHERE rownumber > 1
错误:
消息156,级别15,状态1,过程findVersions,行中的关键字10
附近有语法错误 'SELECT'。
消息156,级别15,状态1,过程findVersions,行中的关键字 '联盟'
任何建议近13
语法不正确?
更新 例如:我与查询有什么关系。我必须显示第一个查询的第一个结果,第二个查询的第一个结果以及第一个查询结果的剩余三个结果。
1st class: (has 4 student)
Tom (Has highest score)
Rex (Hss second highest score)
Rambo (HAs 3rd highest score)
Betty (Has least score)
2nd class: (has 1 student)
Spooky (Has the highest score)
Required result order in DataControl:
Tom
Spooky
Rex
Rambo
Betty
这看起来并不完整 - “@ UnsegQuery”已声明并设置,但从未使用过。 UNION中的第三个查询不正确,因为它是独立的。打破'联盟',并逐渐增加以确定你的问题是什么。 – 2012-03-01 05:08:17
尝试在子查询周围放置括号('SET @UnsegQuery ='后面)。 – 2012-03-01 05:09:18
@JohnPick:请参阅[TSQL:SET vs SELECT](http://stackoverflow.com/questions/3945361/t-sql-set-verus-select-when-assigning-variables) – 2012-03-01 05:09:46