Ich benutze SQL Server 2014 Management Studio und ich wollte eine gespeicherte Prozedur erstellen, aber ich habe ein Problem am Ende des Codes, wo der Fehler "Falsche Syntax in der Nähe von OFFSET" erscheint .SQL Server 2014 - Falsche Syntax in der Nähe von 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
Ich habe in anderen Beiträgen zu sehen, dass der Fehler auftreten kann, weil die nicht nach einem ORDER BY-OFFSET ist, aber in diesem Fall ist es nach einer ORDER BY.
Eine andere Sache, die ich sah, dass SQL Server 2008 nicht OFFSET
unterstützen, aber ich bin 2014
mit Ich habe überprüft auch, dass die Variablen, die ich verwende deklariert und sie alle sind. ..
Es ist so ziemlich der einzige Fehler, der mich davon abhält, die Prozedur zu erstellen. Wenn jemand helfen könnte, wäre ich sehr dankbar!
Sie sagen, Sie verwenden SQL Management Studio 2014, aber ist Ihre Datenbank auch 2014? Oder laufen Sie 2008R2 als Datenbank? – JanR
Oh ja. Ich habe gerade @@ Version verwendet und es sagt Microsoft SQL Server 2008 R2 (SP2) –