0
SQL Server 2014管理スタジオを使用していますが、ストアドプロシージャを作成したいのですが、「OFFSETに近い構文が正しくありません」というエラーが表示されるコードの最後に問題があります。 。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
私はOFFSET ORDER BYの後ではありませんので、エラーが表示される場合がありますことを、他の記事で見てきたが、この場合にはそれがBY 1 ORDERの後です。私が見た
もう一つは、SQL Server 2008のはOFFSET
をサポートしていないということですが、私は2014年
を使用している私も、私が使用している変数が宣言され、それらはすべてがあることを確認しています。 ..
私が手続きを作成するのを妨げている唯一のエラーです。もし誰かが私を助けることができたら、私は非常に幸せになるでしょう
あなたはSQL Management Studio 2014を使用していますが、2014年もデータベースですか?または2008R2をデータベースとして実行していますか? – JanR
ああそうです。私は@@ versionを使用しましたが、Microsoft SQL Server 2008 R2(SP2) –