旧访问更新声明

Posted

技术标签:

【中文标题】旧访问更新声明【英文标题】:Old Access Update Statement 【发布时间】:2013-07-22 07:55:33 【问题描述】:

我们最近从 Oracle 切换到 SQL Server,我们有这个旧的更新语句,它曾经可以工作,但现在给出错误“操作必须是可更新的查询”。那么查询类型设置为更新,我尝试以管理员身份运行它没有成功,我们能够运行选择语句没有问题,所以连接一定没问题吗?

我不确定我是否只是错过了一些非常简单的东西,因为我习惯于使用 SSMS 而不是 Access。更新语句的代码如下:

UPDATE dbo_LEARNER_AIMS 
INNER JOIN dbo_REGISTRATION_UNITS ON dbo_LEARNER_AIMS.RUL_CODE = dbo_REGISTRATION_UNITS.RUL_CODE 
SET dbo_LEARNER_AIMS.END_DATE = [EXP_END_DATE], 
dbo_LEARNER_AIMS.COMPLETION = "10", 
dbo_LEARNER_AIMS.OUTCOME = "40", 
dbo_REGISTRATION_UNITS.FES_PROGRESS_CODE = "EXT", 
dbo_REGISTRATION_UNITS.FES_PROGRESS_DATE = [EXP_END_DATE], 
dbo_REGISTRATION_UNITS.PROGRESS_STATUS = "X"
WHERE (((dbo_LEARNER_AIMS.END_DATE) Is Null)
AND ((dbo_LEARNER_AIMS.FUNDING_YEAR)="17")
AND ((dbo_LEARNER_AIMS.LEARNING_AIM) = [Enter Aim])
AND ((dbo_LEARNER_AIMS.EXP_END_DATE) Between #8/1/2012#
AND [enter expected end date]));

提前感谢任何答案。

【问题讨论】:

我没听懂你,你是在Access还是SQL Server上运行这个? 对不起,如果我没有很好地解释它 - 我正在 Access 中运行更新。 【参考方案1】:

错误“操作必须是可更新的查询”。 几乎总是意味着索引问题,通常是缺少主键。 还 检查 Query 的属性页面,查找 Snapshot vs Dynaset 设置。

【讨论】:

确实如此。该查询正在更新一个没有主键的视图。我将其更改为更新相关表中的数据并且它有效。感谢您的帮助。【参考方案2】:

试试这个查询:

UPDATE dbo_LEARNER_AIMS 

SET END_DATE = [EXP_END_DATE], 
COMPLETION = "10", 
OUTCOME = "40", 
/*
dbo_REGISTRATION_UNITS.FES_PROGRESS_CODE = "EXT", 
dbo_REGISTRATION_UNITS.FES_PROGRESS_DATE = [EXP_END_DATE], 
dbo_REGISTRATION_UNITS.PROGRESS_STATUS = "X"

You can't update multiple table in one update statement ! */

FROM dbo_LEARNER_AIMS  /* add this line */
INNER JOIN dbo_REGISTRATION_UNITS ON dbo_LEARNER_AIMS.RUL_CODE = dbo_REGISTRATION_UNITS.RUL_CODE 

WHERE (((dbo_LEARNER_AIMS.END_DATE) Is Null)
AND ((dbo_LEARNER_AIMS.FUNDING_YEAR)="17")
AND ((dbo_LEARNER_AIMS.LEARNING_AIM) = [Enter Aim])
AND ((dbo_LEARNER_AIMS.EXP_END_DATE) Between #8/1/2012#
AND [enter expected end date]));

【讨论】:

您好,感谢您的建议,但是当我添加以下行时,UPDATE 语句中出现语法错误:FROM dbo_LEARNER_AIMS :-(. 嗨,Tom,当这个查询用于更新我们的 Oracle 表时,为什么我们可以更新多个表?为你目前所做的努力 +'d 你的答案。 我不知道我从来没有见过你描述的这个更新语法!

以上是关于旧访问更新声明的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 新旧替换一:变量声明

JSLint 错误:将所有“var”声明移动到函数顶部

在 ES6 中声明一个函数?

是否可以在不声明 IBOutlet 属性的情况下访问 IB 对象(例如 UILabel)?

如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?

声明for循环变量最佳实践