T-SQL & Access :: 生成未插入值的 LOG

Posted

技术标签:

【中文标题】T-SQL & Access :: 生成未插入值的 LOG【英文标题】:T-SQL & Access :: generate LOG with not inserted values 【发布时间】:2020-10-08 09:47:00 【问题描述】:

我有一个用Access 编写的非常旧的应用程序,它试图INSERT SQL Server 上的表上的一些数据。 应用程序插入失败,因为该表上有一个主键。

所以我这样解决了这个问题:

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 解决方案

【问题讨论】:

【参考方案1】:

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

SQL Server 没有满足您要求的功能。一些 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())

    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

【讨论】:

以上是关于T-SQL & Access :: 生成未插入值的 LOG的主要内容,如果未能解决你的问题,请参考以下文章

Access 中的 T-SQL 直通查询是不是可以包含本地 Access 表?

从 T-SQL 导出到 Excel 的问题,包括列名和未导出的列上的排序

将 MS Access 查询(使用 IIF() 和 DATESERIAL())事务处理到 T-SQL

T-SQL 中经过 Windows 身份验证的用户需要啥访问权限才能创建 External_Access 或 Unsafe 程序集?

T-SQL:GROUP BY,但保留一个未分组的列(或重新加入它)?

sql T-SQL未使用的索引