T-SQL & Access :: 生成没有插入值的日志

T-SQL & Access :: generate LOG with not inserted values

我有一个用 Access 编写的非常古老的应用程序,它试图 INSERT SQL Server 上 table 上的一些数据。 应用程序无法插入,因为 table 上有一个主键。

所以我这样解决了问题:

IF NOT EXISTS (SELECT 'X' FROM [dbo].[Loan Type]
               WHERE [Loan Type ID] = 'HOME EQUITY')
    INSERT INTO [dbo].[Loan Type] ( [Loan Type ID], [Name] )
    VALUES ('HOME EQUITY', 'Home Equity Loan')

现在我好了,所有的数据都被插入了,那些已经存在的被跳过了。 :)

问题:如何在 T-SQLAccess 中生成日志,告诉我跳过了哪些数据?我需要像 ON ERROR CONTINUE, LOG=<File Name> MAXERRORS=10.

这样的东西

欢迎任何T-SQLAccess解决方案

ON ERROR CONTINUE, LOG=<File Name> MAXERRORS=10

SQL 服务器没有满足您要求的功能。一些 ETL 工具,如 SSIS,虽然有它。

因此,您可以在 t-sql 代码中实现类似的逻辑:

1: If..Else

IF NOT EXISTS (SELECT 'X' FROM [dbo].[Loan Type]
               WHERE [Loan Type ID] = 'HOME EQUITY')
    INSERT INTO [dbo].[Loan Type] ( [Loan Type ID], [Name] )
    VALUES ('HOME EQUITY', 'Home Equity Loan')
ELSE
INSERT INTO [dbo].[Log] ( [Loan Type ID], [Name], DateAdded )
    VALUES ('HOME EQUITY', 'Home Equity Loan', GETDATE())

  1. Try..Catch。类似于:
BEGIN TRY

INSERT INTO [dbo].[Loan Type] ( [Loan Type ID], [Name] )
    VALUES ('HOME EQUITY', 'Home Equity Loan')

END TRY

BEGIN CATCH

INSERT INTO [dbo].[Log] ( [Loan Type ID], [Name], DateAdded )
    VALUES ('HOME EQUITY', 'Home Equity Loan', GETDATE())

END CATCH