いくつかのパラメータに基づいて行を出力するtsqlストアドプロシージャを作成しようとしています。究極の目的は、行を別のテーブルに移動することです。そのため、私はカウントを持っています。移動している行の数を把握したいと思います。 2つのテーブル、Notes
とExtraNotes
があります。 ExtraNotes
には、最初のテーブルからオーバーフロー情報が格納されます。IF文を使用した後にDBから正しい行を出力できない
if
ステートメントを使用して、NoteType
というパラメーターに基づいて正しい行を選択していますが、正しい選択ステートメントをif
に出力する方法がわかりません。私は、各if
内のselect文が
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))
私はここで、ストアドプロシージャよりもより良いサービスを提供でしょうテーブルを返す関数を使用してのように感じます。チェックアウトテーブル値関数:http://msdn.microsoft.com/en-us/library/ms191165aspx – Zugwalt
あなたがここで何をしようとしているのか、あなたがすでに持っているものが何であるのか、私たちに何を求めているのかは不明です。 – RBarryYoung
これをMのパラメータで実行すると、たとえば、Notetype MとSが間違っている行が返されます。 – karmaplus