更新两个表,同时避免外键冲突

时间:2018-03-11 06:05:54

标签: sql sql-server visual-studio-2010 vb.net-2010

基本上,我有两张桌子:

  
      
  1. ITEM_MASTER - srno(主键),名称(唯一键)
  2.   
  3. SELL_RECORD - bill_no(主键),名称(ITEM_MASTER的外键)
  4.   

现在,如果我想更新ITEM_MASTER中的名称,外键将发生冲突。 我做的是:

//adding a new record with new name
INSERT INTO ITEM_MASTER VALUES('srno * -1', new_name)
//update sell record with new name 
UPDATE SELL_RECORD SET name = 'new_name' WHERE name = 'old_name'
//deleted the record with old name 
DELETE FROM ITEM_MASTER WHERE name = 'old_name' 
//restored the original srno 
UPDATE ITEM_MASTER SET srno = 'srno * -1' WHERE name = 'new_name' 

这件事有效。我想问的是,有什么简单的方法吗? 例如,我可以这样做:

UPDATE ITEM_MASTER, SELL_RECORD SET
ITEM_MASTER.name = 'new_name',
SELL_RECORD.name = 'new_name'
WHERE SELL_RECORD.name = 'old_name' AND ITEM_MASTER.name = 'old_name' AND ITEM_MASTER.name = SELL_RECORD.name 

有点像吗? 提前致谢!

2 个答案:

答案 0 :(得分:0)

你可以尝试这个:

Create table ITEM_MASTER 
(
smo varchar(20) Primary key,
name varchar(20) Unique
)

Create table SELL_RECORD
(
bill_no varchar(20) Primary key,
name varchar(20) FOREIGN KEY REFERENCES ITEM_MASTER(name) on update cascade
)

Update ITEM_MASTER set name='new_name' where name='old_name'

您的子表SELL_RECORDS将会更新。

答案 1 :(得分:0)

如果您只是在引用srno(主键)时使​​用正确的外键,则可以随意更新name(除非违反唯一约束)。