向SQL Server追加访问查询结果错误



我正在将Access查询中的数据附加到SQL Server(2019)中的现有表中,有时NULL值会导致"记录被删除";Msgbox(没有错误编号).

例如,我有3列(Text1, Text2, Text3)都是nvarchar(255)和Text1接受NULL值,但有时Text2不…它们实际上是具有相同数据的相同字段。SQL Server中的列和查询中的字段绝对没有什么不同。这是不应该发生的

另一件事是,我在查询之外做了一个make-table查询,使用这个新表代替查询根本没有引起任何问题!为什么会这样?以及如何让查询一致地附加数据?

我试过在DoCmd中追加查询以及直接使用SQL。RunSQL

在链接表管理器中通过自定义ODBC字符串连接SqlSRV表。

从查询;这会产生以下错误:

INSERT INTO tmakContact ( DataAsOf, ContactId, FullName, LoanNum, LoanId, Name, JobTitle, Email, Relationship, Company, Address, CityStateZip, [Number], PhoneNumType )
SELECT DataAsOf, ContactId, FullName, LoanNum, LoanId, Name, JobTitle, Email, Relationship, Company, Address, CityStateZip, [Number], PhoneNumType
FROM qryContact;

当我拿出"关系"one_answers";PhoneNumType"字段时,该查询中的INSERT操作可以正常工作。这两个字段来自外部连接表。这些表来自另一个SQL Server和数据库,我通过链接表管理器中的自定义ODBC字符串从Access中链接到。

从一个表,我在一个表查询从qryContact给出没有错误!

INSERT INTO tmakContact ( DataAsOf, ContactId, FullName, LoanNum, LoanId, Name, JobTitle, Email, Relationship, Company, Address, CityStateZip, [Number], PhoneNumType )
SELECT DataAsOf, ContactId, FullName, LoanNum, LoanId, Name, JobTitle, Email, Relationship, Company, Address, CityStateZip, [Number], PhoneNumType
FROM tmptblContact;

最初我只是运行了DoCmd.OpenQuery "apdContact",这不起作用,这只是一个保存的追加查询使用相同的代码与上面。

SQL for qryContact:

SELECT Now() AS DataAsOf, dbo_Contact.Id AS ContactId, dbo_UserInfo.FullName, dbo_Loaninfo.LoanNum, dbo_ContactLoanLink.LoanId, dbo_Contact.Name, dbo_Contact.JobTitle, dbo_Email.Addr AS Email, Trim([dbo_ContactRelationship]![Descr]) AS Relationship, dbo_Contact.Company, [Add1] & " " & [Add2] AS Address, StrConv([City],3) & ", " & [StateCode] & " " & [Zip] AS CityStateZip, qryPhone.Number, qryPhone.PhoneNumType
FROM ((((dbo_Loaninfo INNER JOIN ((dbo_ContactLoanLink INNER JOIN dbo_Contact ON dbo_ContactLoanLink.ContactId = dbo_Contact.Id) LEFT JOIN dbo_Address ON dbo_Contact.BusAddrAId = dbo_Address.Id) ON dbo_Loaninfo.Id = dbo_ContactLoanLink.LoanId) LEFT JOIN dbo_ContactRelationship ON dbo_ContactLoanLink.ContactRelationshipId = dbo_ContactRelationship.Id) LEFT JOIN dbo_Email ON dbo_Contact.Id = dbo_Email.ContactId) LEFT JOIN qryPhone ON dbo_Contact.Id = qryPhone.ContactId) LEFT JOIN dbo_UserInfo ON dbo_Loaninfo.AssignedUserId = dbo_UserInfo.Id
WHERE (((dbo_Contact.InactiveFlag)="N") AND ((dbo_Loaninfo.LoanStatusId)<>1105) AND ((dbo_Loaninfo.InactiveFlag)="N") AND ((dbo_Loaninfo.PaidOffFlag)="N"));

嗯,有问题的表有任何真/假列-即使没有在您的查询中使用?(表中的位列?).

双重,三重检查SQL server中的目标表(毫无疑问是一个链接到Access的表)是否有任何位列,如果是,确保列有一个哑值(0),为false。

接下来:您没有提到所讨论的目标表是否有一个自动编号PK列(我怀疑它必须有-但请检查并确保这样的表有一个PK)。

接下来:它们在目标表中是真实的,还是单/双列-再次强调,即使它们不是你查询的一部分,确保这些列在sql server(0)中有默认设置。

持续:向sql server目标表添加行版本列。这就是所谓的"行版本"列在SQL中命名为时间戳。(这是世界上最糟糕的名字,因为时间戳列与"time"没有任何关系;或者约会什么的。它是一个ACTUAL行版本的系统,access支持这个特性。

这也意味着在执行更新或插入时,访问不会逐列比较记录。因此,尝试在目标表中添加一个时间戳(又名:行版本)列,并从访问重新链接。

相关内容

  • 没有找到相关文章

最新更新