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-SQL
或Access
中生成可以告诉我跳过哪些数据的日志?我需要ON ERROR CONTINUE, LOG=<File Name> MAXERRORS=10
之类的东西。
欢迎任何T-SQL
或Access
解决方案
【问题讨论】:
【参考方案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 程序集?