日期:2014-05-17  浏览次数:20577 次

sqlserver中修改具有外键的列的SQL?
两张表:主表A,Table1,其中,主表A和Table1之间是主从关系的表,两个表之间通过外键“统一编号”
实现级联更新和删除,现在,我想修改主表A的统一编号列,比如,由nvarchar(18)改为nvarchar(20).
这时候提示修改统一编号列失败!具体语句如下:
alter table 主表A alter column 统一编号 nvarchar(20)
但此时我又不想将关联关系删除后再建立,因为涉及表关联很多,能够有语句可以实现?而在企业管理器里可以直接修改,仅有一个提示都全部修改完成,有没有高手知道如何修改?建表与关系语句如下:


CREATE TABLE [dbo].[TABLE1] (
[统一编号] [nvarchar] (18)  NOT NULL ,
[bb] [char] (10) NULL ,
[cc] [char] (10) NULL ,
[cd] [char] (10)  NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[主表A] (
[统一编号] [nvarchar] (18)  NOT NULL ,
[CC] [nvarchar] (50)  NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TABLE1] ADD 
CONSTRAINT [PK_TABLE1] PRIMARY KEY  CLUSTERED 
(
[统一编号]
)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[主表A] ADD 
CONSTRAINT [PK_tempt] PRIMARY KEY  CLUSTERED 
(
[统一编号]
)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[TABLE1] ADD 
CONSTRAINT [FK_主表A] FOREIGN KEY 
(
[统一编号]
) REFERENCES [dbo].[主表A] (
[统一编号]
) ON DELETE CASCADE  ON UPDATE CASCADE 
GO
SQL?Server SQL

------解决方案--------------------
有外键的话直接级联更新就可以拉,我的博客有级联删除的例子:http://blog.csdn.net/dba_huangzj/article/details/8042999
------解决方案--------------------
我跟踪了一下sql server management studio设计器修改后的做法,有一大堆sql,比删除掉外键更复杂,基本上的逻辑是保存数据到临时表,然后删掉原表,再重建表,再复制数据到新表,所以楼主不要觉得管理器上可以直接修改,还是安心写脚本处理吧