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