如何能忽略依赖于字段的对象,可以修改表字段

chengangcsdn 2008-02-01 04:59:35
我有一表 table1

其中有一字段是sName varchar(10)

现在我想通过SQL语句将其修改为 varchar(20)

alter table1 alter column sName varchar(20)

总要报错,提示有依赖于此列的对象,可我检查了一下除了有个默认值之外就没有了啊,我把默认值删除了。也不能修改。

请问:
有没有什么语句可以忽略依赖于此字段的所以对象,直接修改呢?如果没有,请问用什么办法修改?
...全文
707 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgzaaa 2008-07-16
  • 打赏
  • 举报
回复
不熟,提供删除参考http://support.microsoft.com/kb/916278/zh-cn
chengangcsdn 2008-07-16
  • 打赏
  • 举报
回复
2. 索引, 包括主键/唯一键/索引/统计

在哪里看这个列上的统计
zjcxc 元老 2008-02-02
  • 打赏
  • 举报
回复
如果要自己写脚本的话, 是很痛苦的
至少要考虑如下东西:
1. 约束, 包括字段默认值/CHECK约束
2. 索引, 包括主键/唯一键/索引/统计
3. 外键约束
改的时候要把与要修改的列相关的上述东西删除, 改完后还要加回来

所以你即要找到查找上述对象的方法, 还要想办法查出这些对象的所有信息, 以便能生成重建的脚本


当然这个肯定是写得出来的啦
zjcxc 元老 2008-02-02
  • 打赏
  • 举报
回复
用脚本的话, 要做的东西就多了

不过你可以这样做啊, 找一个环境一样的 sql , 在企业管理器中修改(不要保存, 只做改的操作), 做完后,在工具栏上有个生成脚本(好像是第三个按钮吧), 把里面的脚本复制出来就可以拿到产品环境去用了.
qiuming0306 2008-02-02
  • 打赏
  • 举报
回复
有外键用楼上的@!
qiuming0306 2008-02-02
  • 打赏
  • 举报
回复

create table tb(a text)
insert into tb values ('aaaaaa')
go
alter table tb alter column a char(255)
go
select * from tb
drop table tb
---结果集
(1 row(s) affected)
a
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
aaaaaa

(1 row(s) affected)

JiangHongTao 2008-02-02
  • 打赏
  • 举报
回复
更新的例子
--直接执行报错
alter table mas alter column ida varchar(20)
go
/*
服务器: 消息 5074,级别 16,状态 8,行 5
对象 'PK_mas' 依赖于 列 'ida'。
服务器: 消息 4922,级别 16,状态 1,行 5

ALTER TABLE ALTER COLUMN ida 失败,因为有一个或多个对象访问此列。
*/
--删除所有外键引用
ALTER TABLE [dbo].[sub] DROP CONSTRAINT [FK_sub_mas]
--删除主键
ALTER TABLE [dbo].[mas] DROP CONSTRAINT [PK_mas]

--修改主表
alter table mas alter column ida varchar(20) not null--注意主键要加 not null
--修改所有引用表
alter table sub alter column ida varchar(20)
--恢复主键
ALTER TABLE [dbo].[mas] ADD CONSTRAINT [PK_mas] PRIMARY KEY CLUSTERED ([ida]) ON [PRIMARY]
--恢复所有外键
ALTER TABLE [dbo].[sub] ADD CONSTRAINT [FK_sub_mas] FOREIGN KEY([ida]) REFERENCES [mas] ([ida])

JiangHongTao 2008-02-02
  • 打赏
  • 举报
回复
上面查外键引用的不对,用下面的可以查到。结果列出了所有引用该表的表和外键的名称。
select 
convert(varchar(20),(select name from dbo.sysobjects where id = a.constid)) as 外键名称,
convert(varchar(20), (select name from dbo.sysobjects where id = a.fkeyid)) as 引用表,
convert(varchar(20), (select name from dbo.sysobjects where id = a.rkeyid)) as 主表
from dbo.sysforeignkeys a
where rkeyid in(select id from dbo.sysobjects where name = '主表名称')
-狙击手- 2008-02-02
  • 打赏
  • 举报
回复
sp_help tablename
JiangHongTao 2008-02-02
  • 打赏
  • 举报
回复
如果是自己的产品,可以查找数据库设计文档,找到所有对该表的引用
方法还是同LS。
JiangHongTao 2008-02-02
  • 打赏
  • 举报
回复
1、在查询分析器找到该表。
2、找到相关性,里面有该表被其它表作为外键的引用。
3、依次找到这些表,并通过约束找到对应的外键,通过右键生成创建代码和删除代码。
4、先执行所有的删除代码,在执行修改表代码,最后执行所有的创建代码。
ojuju10 2008-02-02
  • 打赏
  • 举报
回复

sp_help tablename
查看一下:
看看是否设置了约束(check,defult默认值,Fk外键,Pk主键),
如果有,则取消约束

再运行脚本:
alter table table1 alter column [sName] varchar(20)
再添加约束
ojuju10 2008-02-02
  • 打赏
  • 举报
回复

看看是否设置了约束(check,defult默认值,Fk外键,Pk主键),或者是否在这个字段上面有触发器
elvis_gao 2008-02-02
  • 打赏
  • 举报
回复
alter table table1 alter column [sName] varchar(20)
在企业管理器里看看有没有外键 或者存在触发器
ydlchina 2008-02-02
  • 打赏
  • 举报
回复
?
-狙击手- 2008-02-02
  • 打赏
  • 举报
回复
上面的错误不是说得很明白了呀
chengangcsdn 2008-02-02
  • 打赏
  • 举报
回复
我的语句是ALTER TABLE dlysale ALTER COLUMN salemoney
chengangcsdn 2008-02-02
  • 打赏
  • 举报
回复
首先感谢各位的回复!

由于公司开发区不能上网,所以对没有及时回复大家说声抱歉!

首先运用上面的方法,查询了表,该字段并没有任何约束,默认,外键等。

但还是要报错,报错信息为:

服务器: 消息 5074,级别 16,状态 8,行 1
统计 'hind_1724077428_21A_7A_8A_16A_19A_24A_27A_35A_43A_51A' 依赖于 列 'salemoney'。
服务器: 消息 4922,级别 16,状态 1,行 1
ALTER TABLE ALTER COLUMN salemoney 失败,因为有一个或多个对象访问此列


邹大侠的方法是可以,但不足处在于,由于是产品,所以每个客户的数据库经历版本的升级等,版本不同的原因,并不能将我生成的SQL语句通用于所有用户。

请各位大侠再想想办法!
chengangcsdn 2008-02-01
  • 打赏
  • 举报
回复
to:liangCK
那又怎么实现SQL语句修改呢?
to:kk19840210

可以在企业管理器中修改。

但我们是做产品,且产品已发布,所以只能以脚本方式修改。

to:allen_cn

报的错就是:有一个或多个对象依赖于该列。
allen_cn 2008-02-01
  • 打赏
  • 举报
回复
是否有主外键,触发器等等
提示应该有更具体的说明吧
加载更多回复(2)

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧