2017-03-23 70 views
0

我更新一个视图以获得两列中相同的值,但它交换两个值,而不是只设置它。我的(减少这样)查看UpdateADAuftrag2是这样的。SQL UPDATE SET交换值

SELECT  dbo.CSDokument.AD1, dbo.UpdateAS400zuSellingBenutzer2.BenutzerNr 
FROM  dbo.AS400Auftrag 
      INNER JOIN 
      dbo.CSDokument ON dbo.AS400Auftrag.Angebotsnummer = dbo.CSDokument.Angebotsnummer 
      INNER JOIN 
      dbo.UpdateAS400zuSellingBenutzer2 ON dbo.AS400Auftrag.AD = dbo.UpdateAS400zuSellingBenutzer2.SchluesselWert 
      AND 
      dbo.CSDokument.AD1 <> dbo.UpdateAS400zuSellingBenutzer2.BenutzerNr 
      WHERE  (dbo.AS400Auftrag.AD IS NOT NULL) 

重要的部分是dbo.CSDokument.AD1 <> dbo.UpdateAS400zuSellingBenutzer2.BenutzerNr

AD1为外部工人用户号码和BenutzerNr意味着用户号码。所以例如查理布朗是一名外部工作人员,用户号码为31.在AD1为31时 - 查理布朗是该文件的外部工作人员(在这种情况下命令)。

UPDATE语句洛斯这样

UPDATE [dbo].[UpdateADAuftrag2] 
SET [AD1] = [BenutzerNr] 

我有例如这些值

AD1 | BenutzerNr 
31 | 54 
99 | 384 
112 | 93 

更新后的结果是这样的

AD1 | BenutzerNr 
54 | 31 
384 | 99 
93 | 112 

为什么不呢?

AD1 | BenutzerNr 
54 | 54 
384 | 384 
93 | 93 

编辑:UpdateAS400zuSellingBenutzer也是一种景观,但据我可以看到它仅包含BenutzerNr,而不是AD1

+0

我想我找到了这个错误。一旦完成解决方案,我会尽快写出答案。简短回答:有2个错误 - 错误1查看更新AS400zuSellingBenutzer2有时有2个结果有时用于CSDokument和Bug 2中的一个条目表AS400Auftrag中有2个条目,然后在这两个条目之间切换。所以看起来像'SET'切换了两个条目,但这只是偶然。谢谢阅读。 – user1673665

回答

0

有2个错误 - 错误1查看更新AS400zuSellingBenutzer2有时有2个结果有时用于CSDokument和Bug 2中的一个条目表AS400Auftrag中有2个条目,然后它在这两个条目之间切换。所以它看起来像SET切换了两个条目,但这只是偶然。谢谢阅读。

0

首先,您永远不会在视图中看到您的预期结果。您的UPDATE语句实际上是一个DELETE语句(就视图而言)。如果AD1 <> BenutzerNr行只出现在视图中,但您将它们设置为相等。

但是,可更新视图的文档声明“任何修改,包括UPDATE,INSERT和DELETE语句,都必须仅引用来自一个基表的列”。您的更新语句引用多个表中的列。

https://msdn.microsoft.com/en-us/library/ms187956.aspx#Updatable Views

我不知道你想在这里实现什么,但在我的经验,它通常更容易发出对直接基表的UPDATE语句。

+0

嗯好吧,但我有这些相互关联的不同表格。我需要从'CSDokument'和'BenutzerNr'('BenutzerNr'表示用户号码)'UpdateAS400zuSellingBenutzer2'比较'AD1'('AD1'是外部工作者的用户号码)。那么我怎么能没有看法呢? – user1673665