2013-07-22 26 views
0

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

我不确定我是否仅仅错过了一些非常简单的事情,因为我习惯于在SSMS中工作而不是访问。更新语句的代码如下:

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])); 

在此先感谢您的任何答案。

+0

我还没有理解你,你在Access或SQL Server上运行这个吗? –

+0

对不起,如果我没有解释得很好 - 我在Access中运行更新。 – Zakerias

回答

1

错误 '操作必须是一个可更新的查询'。
几乎总是意味着索引问题,通常是缺少主键。 也 检查查询的属性页,寻找快照与动态集设置。

+0

确实。查询更新视图没有主键..我改变它来更新相关表格中的数据,它工作。谢谢你的帮助。 – Zakerias

1

尝试此查询:

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])); 
+0

你好,谢谢你的建议,但我在UPDATE语句中出现语法错误时,我添加了一行:FROM dbo_LEARNER_AIMS :-(。 – Zakerias

+0

我的不好,看看编辑 – jazzytomato

+0

嗨汤姆,我们怎么能更新多个表当这个查询用来更新我们的Oracle表?+'d您的答案迄今为止您的努力。 – Zakerias