2013-10-24 41 views
0

學習視圖的概念。 1)我創建了兩個表格和一個視圖。 2)修改視圖中某個人的e_id。修改包含兩個表的視圖sql server 2012

預期結果:希望ID在視圖以及表格中進行更改。

實際結果:修改後的行從視圖中刪除。 但E_ID在脊髓癆之一變爲

我創建一個名爲emp_info(E_ID,ENAME) 添128 蜂花132

表2簡單的表:MYTAB含有(DESIG,工資,DOJ,SSN ,E_ID) 執行銷售頭81000.9 1/10/2011 1003 128 執行頭點燃99077.9 11/10/2011 1004 132

創建的視圖vmytab

create view vmytab 
as 
select b.e_id,a.ename,b.desig from 
mytab b,emp_info a 
where a.e_id=b.e_id 

我試圖更改melissa的員工ID(E-ID)。

update vmytab set e_id=200 where ename='melissa' 

我得到了(影響1行(S))的結果

當我檢查了我的觀點(select * from vmytab) 整行屬於梅利莎失蹤 只有1屬於蒂姆記錄在那裏。

,但是當我檢查MYTAB表,梅麗莎的E_ID已改變爲200

我再次檢查emp_info。這裏的舊唱片即梅利莎132出席。

任何人都可以解釋的不明確或我做了什麼錯誤的代碼?

+0

它是MySql還是SQL Server? – Szymon

回答

0

當您更新一個表中的id時,視圖中的內部聯接沒有返回任何行。記錄已更新(在視圖中爲該列指定的表中),但ID不再匹配。

在這種情況下,您需要使用新的ID更新兩個表(不要使用視圖更新)。

0

當您更新的SQLServer只更新表的一個在你看來一個觀點:

任何修改,包括UPDATE,INSERT,DELETE語句, 必須從只有一個基表中的列。

CREATE VIEW (Transact-SQL)

個人而言,我從來沒有使用過查看快捷鍵更新表,你的情況,你需要更新兩個表,這樣做的唯一方法是使用兩個查詢,但如果你想要確保更新同時發生在兩個表上,您可以使用一個事務,請點擊此處:How to update two tables in one statement in SQL Server 2005?

相關問題