これらの行があるとしましょう、
InstrumentID
547
698
708
InstrumentIDは自動生成された列ではありません。
プロシージャでパラメータを698として渡す場合、前の値を547として、次の値を708として取得する必要があるとします。SQLでこれを効率的に行うにはどうすればよいですか。
私はこの手順を持っていますが、それは効率的ではありません(そして正しくありません)。
Alter PROCEDURE GetNextAndPreviousInsturmentID
(
@InstrumentID varchar(14),
@PreviousInstrumentID varchar(14) OUT,
@NextInstrumentID varchar(14) OUT
)
AS
BEGIN
Declare @RowNum int = 0
Select @RowNum = ROW_NUMBER() Over (Order by Cast(@InstrumentID as decimal(18))) From Documents Where InstrumentID = @InstrumentID
;With normal As
(
Select ROW_NUMBER() Over (Order by Cast(@InstrumentID as decimal(18))) as RowNum, Cast(InstrumentID as decimal(18)) as InstrumentID
From Documents
)
Select @PreviousInstrumentID = InstrumentID From normal
Where RowNum = @RowNum - 1
Select @NextInstrumentID = InstrumentID From normal
Where RowNum = @RowNum + 1
END
GO