簡體   English   中英

如何修改SQL Server 2008 R2 FK的父表

[英]How i can modify the Parent table for my Sql server 2008 r2 FK

我的表內有FK,但我想修改FK的父表。 那么是否有可以實現此目的的alter命令? 或者我需要刪除FK並創建一個新的? 謝謝

將此添加到您的PK中,它將自動為您更新所有FK:

ON UPDATE CASCADE

有關完整的詳細信息,您可以閱讀本文

編輯根據您的評論,如果要更改PK數據類型,則取決於更改:

  • 如果可以將舊類型隱式轉換為新類型而不會造成任何損失:
    1. 首先更改PK類型。
    2. 將FK類型更改為相同。
  • 如果不能將舊類型隱式轉換為新類型而不會造成任何損失:
    1. 首先中斷關系(即刪除FK限制/索引)。
    2. 轉換PK。 如果需要修改數據,請將舊值和新值都保存在臨時表中。
    3. 轉換FK。 如果在上一步中更改了PK數據,請使用臨時表中的映射值更新FK。
    4. 再次創建關系(即創建FK限制/索引)。

要修改數據類型,請使用ALTER命令,語法為:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

例子:

ALTER TABLE table_name
ALTER COLUMN id NUMBER(10,2);

ALTER TABLE table_name
ALTER COLUMN id VARCHAR(20);

有關完整的詳細信息,您可以閱讀本文

看起來您在尋找alter語句,但是由於您沒有確切提及要修改的內容; 我假設您要更改列數據類型的大小。 您可以執行以下操作(示例;例如,您要將大小從10更改為15)

alter table sample3 
alter column name varchar(15)

編輯:

在這種情況下,這就是您應該做的。 您需要刪除現有約束並重新創建約束以指向TableC

alter table TableA
drop constraint your_FK_constraint_name

alter table TableA
add constraint constraint_name 
FOREIGN KEY (column_name) references TableC(some other column name)

一個例子:

alter table sample2
drop constraint FK__sample2__realnam__09DE7BCC

alter table sample2
add constraint FK__sample2__realnam 
FOREIGN KEY (realname) references sample1(name)

基於此評論,“現在我在TableA中的當前FK引用了另一個表主鍵TableB。但是我需要修改當前FK以引用tableC而不是tableB ...這是我需要的(修改父表我的FK)–“

父表是TableB。 對該表無需執行任何操作。

在TableA上,您必須:

  1. 刪除現有的外鍵約束。
  2. 根據需要進行更新,以使適用列中的所有值在TableC中都具有匹配的值。
  3. 添加一個新的外鍵約束。

以該順序。

編輯從這里開始

是語法的鏈接,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM