"ThreadID"と "UserID"の2つのパラメータをとり、2つの値を持つテーブルを返します。テーブル値関数を作成しようとしています。 "HasVoted"と "IsUpvote"。それが動作するはずのように私にテーブル値関数のキーワード 'IF'の近くの構文が正しくありません
CREATE FUNCTION HasVotedIsUpvote
(
@ThreadID int,
@UserID int
)
RETURNS @returnTable TABLE
(
HasVoted int NOT NULL,
IsUpvote int NOT NULL
)
AS
BEGIN
DECLARE @HasVoted bit
DECLARE @IsUpvote bit
SELECT @HasVoted =
CASE WHEN EXISTS (SELECT tv.IsUpvote
FROM dbo.ThreadVotes as tv
WHERE tv.ThreadID = @ThreadID
AND tv.UserID = @UserID)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
IF @HasVoted = 1
BEGIN
SELECT @IsUpvote =
(SELECT tv.IsUpvote
FROM dbo.ThreadVotes as tv
WHERE tv.ThreadID = @ThreadID
AND tv.UserID = @UserID)
END
BEGIN
INSERT @returnTable
SELECT @HasVoted, @IsUpvote
END
RETURN
END
GO
これがようだが、私は、エラーメッセージが表示されます。
Msg 156, Level 15, State 1, Procedure HasVotedIsUpvote, Line 38 [Batch Start Line 4]
Incorrect syntax near the keyword 'IF'.
ELSE CAST(0 BIT AS)END – Snowlockk
うわー、それは速かったが、それは動作します:
これを試してみてください!どうもありがとう! –
これは非常に非効率な理由/機能の実装であるようです。これは、非常に "手続き的"なので、良いSQLが(セットベースの)ものとは逆のものです。これは一般にどのように使用されますか? –