いくつかのパラメーターに基づいて行を出力する tsql ストアド プロシージャを作成しようとしています。最終的な目的は、行を別のテーブルに移動することです。そのため、カウントがあります。移動している行の数を追跡したいと考えています。と の 2 つのテーブルがありNotes
ますExtraNotes
。はExtraNotes
、最初のテーブルからのオーバーフロー情報を保持します。
ステートメントを使用して、if
呼び出されたパラメーターに基づいて正しい行を選択していますNoteType
が、 内で正しい選択ステートメントを出力する方法がわかりませんif
。if
それぞれの選択ステートメントが間違っていることを知っています
select *
from dbo.Notes
left join dbo.ExtraNotes on Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
正しい行を出力し、これをより適切に再構築する方法について、誰かがいくつかの指針を提供できますか?
完全なコードはこちらです。
alter proc selectrows
--external variables
@Date datetime,
@NoteType varchar(2)
as
--internal variables
--Count variables, before any changes
declare @count_rowsBefore int
declare @count_Extra_rowsBefore int
--Count variables of selected rows to be moved
declare @count_SelectedRows int
declare @count_Extra_SelectedRows int
select @count_rowsBefore = count(*)
from dbo.Notes
select @count_Extra_SelectedRows = count(*)
from dbo.ExtraNotes
if(@NoteType= 'B')
begin
select @count_SelectedRows = count(dbo.Notes.NoteID), @count_Extra_SelectedRows = count(dbo.ExtraNotes.NoteID)
from dbo.Notes
left join dbo.ExtraNotes on
Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
select *
from dbo.Notes
left join dbo.ExtraNotes on
Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
end
else if(@NoteType = 'S')
begin
select @count_SelectedRows = count(dbo.Notes.NoteID),
@count_Extra_SelectedRows = count(dbo.ExtraNotes.NoteID)
from dbo.Notes
left join dbo.ExtraNotes on
Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
and NoteType = 'S'
select *
from dbo.Notes
left join dbo.ExtraNotes on
Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
end
else if (@NoteType = 'M')
begin
select @count_SelectedRows = count(dbo.Notes.NoteID),
@count_Extra_SelectedRows = count(dbo.ExtraNotes.NoteID)
from dbo.Notes
left join dbo.ExtraNotes on
Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
and NoteType = 'M'
select *
from dbo.Notes
left join dbo.ExtraNotes on
Notes.NoteID = dbo.ExtraNotes.NoteID
where NoteDate <= @Date
end
else
begin
raiserror('Please enter a valid Note Read Type= M, S or B',16,1)
end
Print 'Total Number of rows: ' + cast(@count_rowsBefore as varchar(10))
Print 'Total Number of "Extra" rows: ' + cast(@count_Extra_RowsBefore as varchar(10))
Print '-----------------------------------------------'
Print 'Total Number of rows to Move: ' + cast(@count_SelectedRows as varchar(10))
Print 'Total Number of "Extra" Rows to Move: ' + cast(@count_Extra_SelectedRows
as varchar(10))