0
我正在使用SQL Server 2014管理工作室,我想創建一個存儲過程,但我有一個問題,在代碼的最後出現錯誤「不正確的語法靠近OFFSET」出現。SQL Server 2014-不正確的語法附近OFFSET
CREATE PROCEDURE [dbo].[GetGamesPlayed]
@gameSession int,
@datestart datetime,
@dateend datetime,
@orderBy nvarchar(50) = 'email',
@sortOrder nvarchar(4) = 'asc',
@search nvarchar(50) = '',
@startRow int = 0,
@rows int = 2147483647
AS
BEGIN
SET NOCOUNT ON;
SELECT t.*,
COUNT(*) OVER() AS filteredRows,
(SELECT COUNT(id) FROM gameplayed WHERE gameplayed.id_GameSession = @gameSession) AS totalRows
FROM (SELECT
DISTINCT GamesTable.[Game ID],
GamesTable.[Rep Id],
GamesTable.[User Id],
GamesTable.[Date],
GamesTable.[Email],
GamesTable.[Name],
GamesTable.[Phone Number],
GamesTable.[Tokens Played],
CASE
WHEN prizewon.pending = 1 THEN 'Pending'
WHEN prizewon.skillTestingQCorrect = 1 AND prizewon.rulesAccepted = 1 THEN 'Yes'
ELSE 'No'
END AS [Won]
FROM PrizeWon
RIGHT OUTER JOIN (
SELECT
GamePlayed.id AS [Game ID],
GamePlayed.playedOn AS [Date],
users.repId AS [Rep Id],
users.id AS [User Id],
users.fullName AS [Name],
users.email AS [Email],
users.phoneNumber AS [Phone Number],
GamePlayed.tokensPlayed AS [Tokens Played]
FROM GamePlayed
INNER JOIN Users on GamePlayed.id_Users = Users.id
WHERE GamePlayed.id_GameSession = @gameSession) AS GamesTable ON GamesTable.[Game ID] = prizewon.id_GamePlayed
WHERE GamesTable.Date >= @datestart
AND GamesTable.Date <= @dateend
AND ( GamesTable.[Email] LIKE '%' + @search + '%'
OR GamesTable.[Rep Id] LIKE '%' + @search + '%'
OR GamesTable.[Name] LIKE '%' + @search + '%'
OR GamesTable.[Game ID] LIKE '%' + @search + '%'
)
) t
--order by cases must be split into datatypes
ORDER BY
CASE WHEN @sortOrder = 'asc' THEN
CASE @orderBy -- nvarchar
WHEN 'repid' THEN t.[Rep Id]
WHEN 'name' THEN t.[Name]
WHEN 'email' THEN t.[Email]
WHEN 'phone' THEN t.[Phone Number]
WHEN 'won' THEN t.Won
END
END ASC,
CASE WHEN @sortOrder = 'asc' THEN
CASE @orderBy --date
WHEN 'date' THEN t.Date
END
END ASC,
CASE WHEN @sortOrder = 'asc' THEN
CASE @orderBy --int
WHEN 'id' THEN t.[Game ID]
WHEN 'tokens' THEN t.[Tokens Played]
END
END ASC,
CASE WHEN @sortOrder = 'desc' THEN
CASE @orderBy -- nvarchar
WHEN 'repid' THEN t.[Rep Id]
WHEN 'name' THEN t.[Name]
WHEN 'email' THEN t.[Email]
WHEN 'phone' THEN t.[Phone Number]
WHEN 'won' THEN t.Won
END
END DESC,
CASE WHEN @sortOrder = 'desc' THEN
CASE @orderBy --date
WHEN 'date' THEN t.Date
END
END DESC,
CASE WHEN @sortOrder = 'desc' THEN
CASE @orderBy --int
WHEN 'id' THEN t.[Game ID]
WHEN 'tokens' THEN t.[Tokens Played]
END
END DESC
OFFSET @startRow ROWS FETCH NEXT @rows ROWS ONLY
END
我已經看到了其他職位可能出現的錯誤,因爲ORDER BY之後的偏移量不大,但在這種情況下,它是一個ORDER BY後。
另一件事,我看到的是SQL Server 2008中不支持OFFSET
,但我使用2014年
我也檢查了,我使用的變量聲明,他們都是。 ..
它幾乎是使我無法創建過程的唯一錯誤。如果有人能幫助我,我會非常感激!
你說你正在使用SQL Management Studio 2014,但你的數據庫也是2014嗎?或者你有沒有把2008R2作爲數據庫運行? – JanR
哦,是的。我只使用@@版本,它說Microsoft SQL Server 2008 R2(SP2) –