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

原创 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

mysql查询包含某字段的所有表

  • 2013年11月29日 17:11
  • 578B
  • 下载

SQL批量删除表中指定字段对应的所有约束

  • 2016年01月12日 14:46
  • 2KB
  • 下载

sql查询表中某字段下所有重复的记录

  • 2012年05月15日 15:29
  • 813B
  • 下载

删除数据库中所有表中指定的字段

– 更精确的查询SELECT obj.name FROM SysObjects obj LEFT JOIN syscolumns col ON col.id = obj.id WHERE obj....
  • wl076
  • wl076
  • 2016-08-25 11:45:41
  • 1062

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

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_deletefield]') and OBJECTPRO...
  • shejiangao
  • shejiangao
  • 2014-03-12 09:47:15
  • 326

Oracle的Function,删除所有表中某字段为特定值的记录

v_expense VARCHAR2(200); v_tableName VARCHAR2(100); v_tableNameCol VARCHAR2(100); -- 获取当前数据...
  • yueritian
  • yueritian
  • 2014-05-27 11:20:20
  • 1086

ORACLE中如何用一条SQL语句删除一个表中所有某个列的值为空的数据?

delete from 表名称 where 列名称 is null;
  • thunder_0927
  • thunder_0927
  • 2014-01-09 16:06:18
  • 4038

Mongodb 查询存在 XX 字段的记录,删除某个列

查询存在 xx 字段的记录 db.good.find({"goodId": { $exists: true }}) 查询不存在 xx 字段的记录 db.good.find({"textureNam...
  • MitKey
  • MitKey
  • 2016-02-19 18:39:19
  • 4503

查询数据库中带有某个字段的所有表名

mysql数据库查询带有某个字段的所有表名 SELECT * FROM information_schema.columns WHERE column_name='column_name'; ...
  • TimOut
  • TimOut
  • 2017-07-03 13:25:55
  • 2779

批量删除文件夹下包含指定字段的文件

using System; using System.IO; using System.Text.RegularExpressions; class App { static void...
  • a497785609
  • a497785609
  • 2010-11-12 13:44:00
  • 4222
收藏助手
不良信息举报
您举报文章:删除某字段的所有关系及该字段
举报原因:
原因补充:

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