In our programming practice we can face the situation, when deleting of a row (or rows) from some table (for example, Table_0) will necessarily cause deleting several rows from another table (Table_1), etc. This is situation when one of the columns of the Table_1 is the foreign key, which refers to the column (primary key) of the Table_0. And very often we have to know how much rows were deleted from Table_0, Table_1 ( and may be Table_2 , etc.). In this article I will explain how you can use such a T-SQL (SQL Server 2005) feature as OUTPUT clause in order to get information about rows, which were affected, when deleting process is executed for several tables, "connected" by foreign keys. The examples are written using T-SQL and C#.
For simplicity we will consider a case only with two tables: HelthParameter and CheckPapameter (fig. 1). Don't look for some "deep sense" for these tables, they are just for example.

Figure 1.
As you can see each execution of the query:
DELETE FROM dbo.HelthParameter WHERE (HelthParameterID = @Original_HelthParameterID);
has to execute some query like this (because of the HelthParameterID column in the CheckPapameter):
DELETE FROM dbo.CheckPapameter WHERE (HelthParameterID = @Original_HelthParameterID);
OUTPUT DELETED.<SomeColumnOfOurTable> INTO <@TableVariable>
Now we just count rows of our @TableVariable and return results to the client.
IF OBJECT_ID ( '[dbo].[usp_HelthParameter_Delete]', 'P')
IS NOT NULL
DROP PROCEDURE [dbo].[usp_HelthParameter_Delete];
GO
CREATE PROCEDURE [dbo].[usp_HelthParameter_Delete]
(
@Original_HelthParameterID smallint,
@DeletedCount nvarchar(200) OUTPUT
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @TableHelth table (DeletedCheck int );
DECLARE @TableCheck table (DeletedCheck int );
DECLARE @CountHelth int;
DECLARE @CountCheck int;
BEGIN TRY
BEGIN TRANSACTION;
DELETE FROM dbo.HelthParameter
OUTPUT DELETED.HelthParameterID
INTO @TableHelth
WHERE (HelthParameterID =
@Original_HelthParameterID);
DELETE FROM dbo.CheckPapameter
OUTPUT DELETED.CheckPapameterID
INTO @TableCheck
WHERE (HelthParameterID =
@Original_HelthParameterID);
SELECT @CountHelth =
(select count(*) from @TableHelth)
SELECT @CountCheck =
(select count(*) from @TableCheck)



Join the conversation! Your thoughts help the community grow.