MSSQL 如何删除字段的所有约束和索引
代码如下:
- ----------------------------------------------------------
- -- mp_DropColConstraint
- -- 功能:删除某个表的某列的所有约束
- -- 入口:
- -- @TableName NVARCHAR(128) -- 表名
- -- @ColumnName NVARCHAR(128) -- 列名
- ----------------------------------------------------------
- if OBJECT_ID(N'dbo.mp_DropColConstraint', N'P') is not null
- drop procedure dbo.mp_DropColConstraint
- go
- create procedure dbo.mp_DropColConstraint
- @TableName NVARCHAR(128),
- @ColumnName NVARCHAR(128)
- as
- begin
- if OBJECT_ID(N'#t', N'TB') is not null
- drop table #t
- -- 查询主键约束、非空约束等
- select ROW_NUMBER() over(order by CONSTRAINT_NAME) id, CONSTRAINT_NAME into #t from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_CATALOG=DB_NAME()
- and TABLE_NAME=@TableName and COLUMN_NAME=@ColumnName
- -- 查询默认值约束
- declare @cdefault int, @cname varchar(128)
- select @cdefault=cdefault from sys.syscolumns where name=@ColumnName and id=OBJECT_ID(@TableName)
- select @cname=name from sys.sysobjects where id=@cdefault
- if @cname is not null
- insert into #t select coalesce(max(id), 0)+1, @cname from #t
- declare @i int, @imax int
- select @i=1, @imax=max(id) from #t
- while @i <= @imax
- begin
- select @cname=CONSTRAINT_NAME from #t where id=@i
- exec('alter table ' + @tablename + ' drop constraint ' + @cname)
- set @i = @i + 1
- end
- drop table #t
- end
- go
- -----------------------------------------
- -- mfn_IsColumnExists
- -- 功能:判断字段是否存在
- -- 入口:
- -- @TableName NVARCHAR(128) -- 表名
- -- @ColumnName NVARCHAR(128) -- 列名
- -- 出口:
- -- BIT 1=存在,0=不存在
- ----------------------------------------
- if OBJECT_ID(N'dbo.mfn_IsColumnExists', N'FN') is not null
- drop function dbo.mfn_IsColumnExists
- go
- create function dbo.mfn_IsColumnExists(@TableName NVARCHAR(128), @ColumnName NVARCHAR(128))
- returns bit
- as
- begin
- declare @rt bit
- set @rt=0
- if (select name from sys.syscolumns where name=@ColumnName and id=OBJECT_ID(@TableName)) is not null
- set @rt=1
- return @rt
- end
- go
- --------------------------------------------------
- -- mfn_GetColumnIndexes
- -- 功能:查询某个字段的所有索引
- -- 入口:
- -- @TableName NVARCHAR(128) -- 表名
- -- @ColumnName NVARCHAR(128) -- 列名(字段名)
- -- 出口:返回一个结果集:
- -- id int -- 序号,从1开始
- -- name nvarchar(128) -- 索引名称
- --------------------------------------------------
- if OBJECT_ID(N'dbo.mfn_GetColumnIndexes', N'TF') is not null
- drop function dbo.mfn_GetColumnIndexes
- go
- create function dbo.mfn_GetColumnIndexes(@TableName NVARCHAR(128), @ColumnName NVARCHAR(128))
- returns @ret table
- (
- id int,
- name NVARCHAR(128)
- )
- as
- begin
- declare @tid int, @colid int
- -- 先查询出表id和列id
- select @tid=OBJECT_ID(@tablename)
- select @colid=colid from sys.syscolumns where id=@tid and name=@columnname
- -- 查询出索引名称
- insert into @ret select ROW_NUMBER() OVER(ORDER BY cols.index_id) as id, inds.name idxname from sys.index_columns cols
- left join sys.indexes inds on cols.object_id=inds.object_id and cols.index_id=inds.index_id
- where cols.object_id=@tid and column_id=@colid
- return
- end
- go
- --------------------------------------------------
- --
- -- mp_DropColumnIndexes
- -- 功能:删除指定列的所有索引
- -- 入口:
- -- @TableName NVARCHAR(128) 表名
- -- @ColumnName NVARCHAR(128) 列名
- --------------------------------------------------
- if OBJECT_ID(N'dbo.mp_DropColumnIndexes', N'P') is not null
- drop procedure dbo.mp_DropColumnIndexes
- go
- create procedure dbo.mp_DropColumnIndexes
- @TableName NVARCHAR(128),
- @ColumnName NVARCHAR(128)
- as
- begin
- if OBJECT_ID(N'#t', N'TB') is not null
- drop table #t
- create table #t
- (
- id int,
- name nvarchar(128)
- )
- insert into #t select * from mfn_GetColumnIndexes(@TableName, @ColumnName)
- -- 删除索引
- declare @i int, @imax int, @idxname nvarchar(128)
- select @i=1, @imax=COALESCE(max(id), 0) from #t
- while @i<=@imax
- begin
- select @idxname=name from #t
- EXEC('drop index ' + @idxname + ' on ' + @tablename)
- set @i=@i+1
- end
- drop table #t
- end
- go
- ------------------------------------------------
- -- mp_DropColConstraintAndIndex
- -- 功能:删除指定字段的所有约束和索引
- -- 入口:
- -- @TableName NVARCHAR(128) -- 表名
- -- @ColumnName NVARCHAR(128) -- 列名
- ------------------------------------------------
- if OBJECT_ID(N'dbo.mp_DropColConstraintAndIndex', N'P') is not null
- drop procedure dbo.mp_DropColConstraintAndIndex
- go
- create procedure dbo.mp_DropColConstraintAndIndex
- @TableName NVARCHAR(128),
- @ColumnName NVARCHAR(128)
- as
- begin
- exec dbo.mp_DropColConstraint @TableName, @ColumnName
- exec dbo.mp_DropColumnIndexes @TableName, @ColumnName
- end
- go
MSSQL 如何删除字段的所有约束和索引的更多相关文章
- mysql 在已存在的表中添加/删除字段约束AUTO_INCREMENT遇到的问题
1. 在已存在的表中添加字段约束AUTO_INCREMENT修饰符 mysql> alter table user modify uid int auto_increment primary k ...
- mssql数据库添加,修改,删除字段
通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smalli ...
- MSSQL删除字段时出现 服务器: 消息 5074,级别 16,状态 1,行 1 的解决办法
有的朋友在做用户维护字段的界面时,肯定发现一个问题,当用脚本:ALTER TABLE 表名 DROP COLUMN 字段名进行删除字段的操作时,会出现“服务器: 消息 5074,级别 16,状态 1, ...
- sql 创建表、删除表 增加字段 删除字段操作
下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRI ...
- Mysql字段操作—增加字段、删除字段、修改字段名、修改字段类型(约束条件)
1.增加字段: alter table tablename add new_field_id type not null default '0'; 例: a ...
- Oracle 增加修改删除字段与添加注释
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...
- Oracle 增加修改删除字段
Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...
- .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...
- SqlServer2012-创建表、删除表 增加字段 删除字段操作
新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \'默认值\' nu ...
随机推荐
- CentOS修改系统默认语言与编码
有时候在安装CentOS无意中把默认语言设置为中文,而部分SSH软件不支持中文编码,所以在远程管理的时候会出现些乱码的现象. 如何修改CentOS的默认语言呢? 请先使用root权限帐户登陆 一. ...
- Oracle 关于V$OPEN_CURSOR
参考链接:http://www.askmaclean.com/archives/about-dynamic-view-open_cursor.html#wrap 在之前的一次讨论中,有同行指出V$OP ...
- 在Java SE中使用Hibernate处理数据
如今,Hibernate正在迅速成为非常流行的(如果不是最流行的)J2EE O/R映射程序/数据集成框架.它为开发人员提供了处理企业中的关系数据库的整洁.简明且强大的工具.但如果外部需要访问这些已被包 ...
- (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
- 删除windows7保留分区
在系统里以管理员运行CMD.exe键入diskpartsel disk 0 (select 选择硬盘)list vol (查看卷)sel vol 0 (选择卷,0为保留分区)inactive ( ...
- DrawerLayout、CoordinatorLayout、CollapsingToolbarLayout的使用--AndroidSupportDesign练手
先po一张效果图 PS:原谅题主的懒惰吧.. 看着是不是很酷炫,那是因为5.0的动画做得好,代码其实没有多少,搞清楚这个布局的层次关系很重要. 废话不多说了,先来看布局文件 最外层是一个DrawerL ...
- CloudXNS首次使用体验
第一步:申请域名 对于从事IT行业的同学,有一个属于自己的域名是一件再正常只是的事情了. 没有,都不好意思说自己是搞机的.赶紧去新网.万网申请一个吧. 第二步:配置域名DNS 域名解析须要用到域名se ...
- Oracle 局域网布置数据库服务器,客户端连接提示TNS:无监听器的解决实现
Oracle布置在局域网中的服务器的时候,用本地PL SQL 链接没有丝毫的问题. 但是,如果用远程客户端的PL SQL 链接的时候却出现了“TNS:无监听器”的问题. 首先,就是进行了服务器端的监听 ...
- ZOJ 2562 More Divisors(高合成数)
ZOJ 2562 More Divisors(高合成数) ACM 题目地址:ZOJ 2562 More Divisors 题意: 求小于n的最大的高合成数,高合成数指一类整数,不论什么比它小的自然数 ...
- No.1小白的HTML+CSS心得篇
一个web前端的小白,听前辈说写好笔记很关键,so 特此用博客来开始记录自己的旅程——Web之路 最近几天看的HTML 1.纠正一个认知错误 “HTML是一种编程语言” ————(错) HTML ( ...