我已經爲數據庫中的一項操作編寫了此存儲過程,但它提示出現兩個錯誤。我相當新,最重要的是,如果有人能糾正這個錯誤,那將會很棒。嘗試執行時存儲過程中的語法錯誤
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