私は現在、EntityFrameworkのストアドプロシージャを使用してシーケンスを生成するプロジェクトに取り組んでいます。ここでCodeProjectの記事を使用していましたが、次のストアドプロシージャを生成しようとすると、構文エラーが発生しました。
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE DBO.p_GetNextInSequence
@SequenceKey VARCHAR(20)
AS
BEGIN
SET NOCOUNT ON
DECLARE @LASTNUMBER INT
DECLARE @NEXTNUMBER INT
DECLARE @FORMATTEDNUMBER VARCHAR(40)
DECLARE @MYKEY VARCHAR(30)
IF NOT EXISTS(SELECT 'X'
FROM SequenceControl
WHERE SequenceControl.SequenceKey = @SequenceKey )
BEGIN
SELECT @SequenceKey AS SequenceKey,
CAST('' AS VARCHAR(30)) AS NextSequenceFormatted,
CAST(0 AS INT) AS NextSequenceInt
RETURN
END
DECLARE @SEQFORMAT VARCHAR(30), @IncrementBy INT,
@IncrementStep INT, @zeropadtodigits INT
SELECT @SEQFORMAT = RTRIM(LTRIM(SequenceFormat)),
@IncrementBy = IncrementBy,
@zeropadtodigits = ZeroPadToDigits
FROM SequenceControl
WHERE SequenceControl.SequenceKey = @SequenceKey
DECLARE @THEROWCOUNT INT
SET @THEROWCOUNT = 0
BEGIN TRANSACTION T1
WHILE ( @THEROWCOUNT =0 )
BEGIN
SELECT @LASTNUMBER= LastSequence
FROM SequenceControl
WHERE SequenceControl.SequenceKey= @SequenceKey
UPDATE SequenceControl
SET LastSequence = @LASTNUMBER + @IncrementBy
WHERE SequenceKey = @SequenceKey AND
LastSequence = @LASTNUMBER
SELECT @THEROWCOUNT = @@ROWCOUNT
END
COMMIT TRANSACTION T1
--SQL Complains near this region...
DECLARE @FMTNUM VARCHAR(20)
SET @NEXTNUMBER = @LASTNUMBER + @IncrementBy
IF ( @zeropadtodigits>0)
SET @FMTNUM = ( REPLICATE('0', @zeropadtodigits) +
CAST(@NEXTNUMBER AS VARCHAR(20)), @zeropadtodigits)
ELSE
SET @FMTNUM = CAST(@NEXTNUMBER AS VARCHAR(10))
SET @FORMATTEDNUMBER = REPLACE(@SEQFORMAT,'[#]', @FMTNUM )
SELECT @SequenceKey AS SequenceKey,
CAST(@FORMATTEDNUMBER AS VARCHAR(30)) AS NextSequenceFormatted,
@NEXTNUMBER AS NextSequenceInt
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
','
SQLは、 56行目付近の構文が正しくないことについて不平を言っています。
DECLARE @FMTNUM VARCHAR(20)
ただし、問題の原因がどこにあるのか、何が原因なのかがわかりません。また、Entity Framework内でのストアドプロシージャの使用(および出力の返し)に関する提案や記事があれば、感謝します。