删除某字段的所有关系及该字段

原创 2004年07月31日 11:07:00

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_deletefield]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_deletefield]
GO

/*--删除某字段的所有关系及该字段

 删除某字段时,常常因为在该字段上定义了约束/外键/默认值
 导致字段删除失败,此存储过就是删除表中指定字段的这些关系

 修正2004.05发布的删除处理中的错误,同时改原来的处理语句为通用存储过程

--邹建 2004.07--*/

/*--调用示例
 
 exec p_deletefield '表名','字段名'
--*/
create proc p_deletefield
@tbname sysname, --要处理的表名
@fdname sysname, --要处理的字段名
@delfield bit=1  --0只删除关系,1同时删除字段
as
declare hCForEach cursor global for
--默认值约束
select sql='alter table ['+b.name+'] drop constraint ['+d.name+']'
from syscolumns a
 join sysobjects b on a.id=b.id and a.name=@fdname and b.name=@tbname
 join syscomments c on a.cdefault=c.id
 join sysobjects d on c.id=d.id
union --外键引用
select s='alter table ['+c.name+'] drop constraint ['+b.name+']'
from sysforeignkeys a
 join sysobjects b on b.id=a.constid
 join sysobjects c on c.id=a.fkeyid
 join syscolumns d on d.id=c.id and a.fkey=d.colid and d.name=@fdname
 join sysobjects e on e.id=a.rkeyid and e.name=@tbname
 join syscolumns f on f.id=e.id and a.rkey=f.colid
union --主键/唯一键/索引
select case when e.xtype in('PK','UQ') then 'alter table ['+c.name+'] drop constraint ['+e.name+']'
  else 'drop index ['+c.name+'].['+a.name+']' end
from sysindexes a
 join sysindexkeys b on a.id=b.id and a.indid=b.indid
 join sysobjects c on b.id=c.id and c.xtype='U' and c.name=@tbname
 join syscolumns d on b.id=d.id and b.colid=d.colid and d.name=@fdname
 left join sysobjects e on e.id=object_id(a.name)
where a.indid not in(0,255)

exec sp_msforeach_worker '?'

if @delfield=1
 exec('alter table ['+@tbname+'] drop column ['+@fdname+']')
go

从原理上教你如何删除织梦dedecms自定义字段

由于dedecms后台没有提供删除自定义字段的方法,我们只能自己手动操作删除,下面的内容是删除的方法和原理。 一、增加一个自定义字段,用于下面的示例中讲解删除。 “核心-频道模型-内容模型管理”,...
  • dustin_php
  • dustin_php
  • 2014年11月15日 10:51
  • 982

Oracle 增加修改删除字段

添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alte...
  • zhangbingtao2011
  • zhangbingtao2011
  • 2017年03月31日 18:20
  • 1084

mybatis+mysql动态字段添删改小结

项目即将结束,现总结mybatis动态
  • qqtt789632147
  • qqtt789632147
  • 2014年11月17日 11:29
  • 1038

类型匹配问题:数据库字段类型与java数据类型的对应关系

在我们写代码的时候,避免不了和数据库打交道,那么就经常会遇到JAVA类型和数据库类型的映射关系。映射表如下:下面就举个例子来讲(JAVA插入MySql的datetime类型的简单的例子):看了映射表可...
  • qq_22063697
  • qq_22063697
  • 2016年12月16日 17:48
  • 1200

Kibana(三):字段映射与可视化

Kibana最吸引我的地方莫过于可视化(visualize),结合桶(buckets)与指标(metrics)能创造出无穷无尽的图形,但是在实践中发现text字段无法进行聚合操作,如果用DSL语句操作...
  • yiifaa
  • yiifaa
  • 2017年07月06日 17:30
  • 1393

HTTP缓存字段总结

HTTP控制缓存的字段主要包括Cache-Control/Pragma,Expires,Last-Modified/Etag。 1、Cache-Control/Pragma 这个HTTP Hea...
  • StruggleShu
  • StruggleShu
  • 2017年06月12日 16:01
  • 403

jackson JSON对象映射出多余字段的bug

调用方法   ObjectMapper mapper = new ObjectMapper(); // mapper.configure(DeserializationConfig...
  • d8111
  • d8111
  • 2015年04月24日 18:00
  • 3857

SQL server 删除表的列

如果这个表的这一列有默认值约束,那么如果直接删除就会报错 这里有两个办法 1.如果创建列的时候给默认约束设置了名字,直接删除该约束 如果是系统默认命名,那么就先获取默认约束名, 删除约...
  • betwater
  • betwater
  • 2016年11月30日 11:22
  • 676

MySQL查询重复字段,及删除重复记录的方法

MySQL查询重复字段,及删除重复记录的方法(转) Submitted by wiley on Thu, 09/03/2009 - 09:36 [教学] MySQL查询...
  • Donthan
  • Donthan
  • 2013年04月11日 02:19
  • 30367

SQL中删除某字段重复的数据

我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢?  重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。 ...
  • zhenyu5211314
  • zhenyu5211314
  • 2013年11月13日 17:05
  • 5994
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:删除某字段的所有关系及该字段
举报原因:
原因补充:

(最多只允许输入30个字)