Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我用update cascade创建了一个外键约束,但它不更新子表_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 我用update cascade创建了一个外键约束,但它不更新子表

Sql 我用update cascade创建了一个外键约束,但它不更新子表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,父表 SELECT * FROM dbo.TBEMPLOYEE 2|Sohail Ashraf|1980-01-12 00:00:00.000|2013-12-05 15:40:48.303|Sen.Software Engineer| 子表 SELECT * FROM dbo.TBADDRESS 2|Sohail Ashraf|sohail.azfal@netsoltech.com|923334447777gulberg|Lahore|Pakistan 其中2是父表中的emp_id(P

父表

SELECT * FROM dbo.TBEMPLOYEE

2|Sohail Ashraf|1980-01-12 00:00:00.000|2013-12-05 15:40:48.303|Sen.Software Engineer|
子表

SELECT * FROM dbo.TBADDRESS

2|Sohail Ashraf|sohail.azfal@netsoltech.com|923334447777gulberg|Lahore|Pakistan
其中
2
是父表中的
emp_id
(PK)和子表中的FK

当我像这样更新父表时

UPDATE TBEMPLOYEE
set emp_nme = 'Mohammad Sohail Ashraf'
WHERE emp_id = 2 
2|Sohail Ashraf|sohail.azfal@netsoltech.com|923334447777|gulberg|Lahore|Pakistan
结果如下

2|Mohammad Sohail Ashraf|1980-01-12 00:00:00.000|2013-12-05 15:40:48.303|Sen.Software Engineer
但is不更新子表记录

更新父表后的子表与上面相同。子表结果如下

UPDATE TBEMPLOYEE
set emp_nme = 'Mohammad Sohail Ashraf'
WHERE emp_id = 2 
2|Sohail Ashraf|sohail.azfal@netsoltech.com|923334447777|gulberg|Lahore|Pakistan

有人能帮我吗?

你误解了级联的意思。它仅适用于外键列,而不适用于整个记录。如果更改父记录中PK字段中的值,则新值将级联到子记录中的FK字段。其他字段不受影响


这就引出了一个问题,为什么首先要复制数据?如果父记录中存储了名称,那么为什么子记录中也存储了名称?它应该只在一个或另一个。如果需要两个表中的数据,则执行联接。

您误解了级联的含义。它仅适用于外键列,而不适用于整个记录。如果更改父记录中PK字段中的值,则新值将级联到子记录中的FK字段。其他字段不受影响


这就引出了一个问题,为什么首先要复制数据?如果父记录中存储了名称,那么为什么子记录中也存储了名称?它应该只在一个或另一个。如果需要两个表中的数据,则执行联接。

更新父表中的主键时,级联更新会更新子表中的外键。

更新父表中的主键时,级联更新会更新子表中的外键。

您的架构似乎是多余的。外键约束旨在通过将数据存储在一个表中并通过键获取数据来减少冗余。在这里,您有两个表中的名称。您的模式似乎是多余的。外键约束旨在通过将数据存储在一个表中并通过键获取数据来减少冗余。在这里,您有两个表中的名称。