If you can't use a foreign key with cascading delete
(why not?), then you can't do this with a single statement. Without cascading deletes, a
DELETE
statement can only affect a single table.
Assuming Microsoft SQL Server, something like this should work:
BEGIN TRY;
BEGIN TRANSACTION;
DELETE
FROM
I
FROM
Bill_Items As I
INNER JOIN Bill As B
ON B.Bill_Id = I.Bill_No
WHERE
B.Date Between @MinDate And @MaxDate
;
DELETE
FROM
Bill
WHERE
Date Between @MinDate And @MaxDate
;
COMMIT;
END TRY
BEGIN CATCH;
IF @@TRANCOUNT > 0 ROLLBACK;
THROW;
END CATCH;