かなり前に書いたSQLプロシージャに問題があります。この手順は、データベース内のすべての不足レコードを表示するレポートを生成するように設計されています。予期しない結果を返すSQLコマンド
たとえば、チケット番号10,11,13が使用されている場合、プロシージャはチケット番号12をレポートに戻す必要があります。
私たちは、各チケット帳を管理し、それに応じてチケット帳を発行します。チケット帳が発行されると、ブック内の25枚のチケットがすべてデータベースに作成され、個々のチケットがデータベースに入力されると、チケットは使用済みとしてマークされます。これは、どのチケットが使用され、使用されないかをプロシージャがチェックする方法です。
これは、我々はこれが私達のデータベーステーブルがレイアウトされているかの簡単な例である
create procedure FindMissingTickets
as
select TicketNum, TicketBookNum, UnitID, DateIssued, IssuedBy
from TicketBooks a
where a.Used='No'
and a.TicketNum < (select MAX(b.TicketNum)
from TicketBooks b
where b.Used='Yes'
and b.UnitID=a.UnitID
and b.BookType='Truck' or b.BookType='Work')
and a.BookType='Truck' or a.BookType='Work'
order by TicketNum desc
go
だから、理論的には、チケット番号525を示すべきですこのレポートに実際には、チケット番号493(データベースの最初のチケット)から550(このタイプの最後のチケット)までのすべてのレコードがレポートに表示されますが、525を除くすべてのレコードがUsed
Used
の列がYes
に設定されているレコードをこのプロシージャが返す方法を完全に理解できません。
ご協力いただきまして誠にありがとうございます。
'a.BookType in( 'Truck'、 'Work') ' – Hogan