SQL: 如果发现重复项,如何通知用户(使用 WHERE NOT EXISTS 子句)?

SQL: How to notify user if duplicates are found (using WHERE NOT EXISTS clause)?

我正在使用存储过程用数据填充 table,并使用 WHERE NOT EXISTS 子句检查重复项。

类似于:

CREATE PROCEDURE [dbo].[spMyProcedure]
    @param udtMyUserDefinedTableType
AS
BEGIN
    INSERT INTO tblMyTable
        SELECT
            Column1, Column2, Column3, Column4, Column5
    FROM @param
    WHERE NOT EXISTS ( SELECT 1
                       FROM tblMyTable i
                       INNER JOIN @param o
                       ON i.Column1 = o.Column1
                       AND i.Column3 = o.Column3
                       AND i.Column5 = o.Column5 )
END

照原样,我的应用程序添加了数据,并跳过了重复项:good.

但我希望在跳过重复行时通知用户。 最好,确切的行。可能吗?

你不能在插入之前添加一个 SELECT ,例如:

SELECT 'Not inserted:', Column1, Column2, Column3, Column4, Column5 
  FROM @param AS o
  WHERE EXISTS
  ( 
    SELECT 1
      FROM dbo.tblMyTable AS i
      WHERE i.Column1 = o.Column1
        AND i.Column3 = o.Column3
        AND i.Column5 = o.Column5 
  );

-- also the insert can be slightly simpler:

INSERT INTO dbo.tblMyTable(column list)
SELECT Column1, Column2, Column3, Column4, Column5
  FROM @param AS o
  WHERE NOT EXISTS ( SELECT 1
                       FROM dbo.tblMyTable AS i
                       WHERE i.Column1 = o.Column1
                         AND i.Column3 = o.Column3
                         AND i.Column5 = o.Column5 );

当然,您会希望进行错误处理并将其包装在事务中以防止竞争条件等。