原文MSSQL 如何删除字段的所有约束和索引

代码如下:

    1. ----------------------------------------------------------
    2. --  mp_DropColConstraint
    3. --  功能:删除某个表的某列的所有约束
    4. --  入口:
    5. --      @TableName NVARCHAR(128)    -- 表名
    6. --      @ColumnName NVARCHAR(128)   -- 列名
    7. ----------------------------------------------------------
    8. if OBJECT_ID(N'dbo.mp_DropColConstraint', N'P') is not null
    9. drop procedure dbo.mp_DropColConstraint
    10. go
    11. create procedure dbo.mp_DropColConstraint
    12. @TableName NVARCHAR(128),
    13. @ColumnName NVARCHAR(128)
    14. as
    15. begin
    16. if OBJECT_ID(N'#t', N'TB') is not null
    17. drop table #t
    18. -- 查询主键约束、非空约束等
    19. select ROW_NUMBER() over(order by CONSTRAINT_NAME) id, CONSTRAINT_NAME into #t from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_CATALOG=DB_NAME()
    20. and TABLE_NAME=@TableName and COLUMN_NAME=@ColumnName
    21. -- 查询默认值约束
    22. declare @cdefault int, @cname varchar(128)
    23. select @cdefault=cdefault from sys.syscolumns where name=@ColumnName and id=OBJECT_ID(@TableName)
    24. select @cname=name from sys.sysobjects where id=@cdefault
    25. if @cname is not null
    26. insert into #t select coalesce(max(id), 0)+1, @cname from #t
    27. declare @i int, @imax int
    28. select @i=1, @imax=max(id) from #t
    29. while @i <= @imax
    30. begin
    31. select @cname=CONSTRAINT_NAME from #t where id=@i
    32. exec('alter table ' + @tablename + ' drop constraint ' + @cname)
    33. set @i = @i + 1
    34. end
    35. drop table #t
    36. end
    37. go
    38. -----------------------------------------
    39. --  mfn_IsColumnExists
    40. --  功能:判断字段是否存在
    41. --  入口:
    42. --      @TableName NVARCHAR(128)    -- 表名
    43. --      @ColumnName NVARCHAR(128)       -- 列名
    44. --  出口:
    45. --      BIT  1=存在,0=不存在
    46. ----------------------------------------
    47. if OBJECT_ID(N'dbo.mfn_IsColumnExists', N'FN') is not null
    48. drop function dbo.mfn_IsColumnExists
    49. go
    50. create function dbo.mfn_IsColumnExists(@TableName NVARCHAR(128), @ColumnName NVARCHAR(128))
    51. returns bit
    52. as
    53. begin
    54. declare @rt bit
    55. set @rt=0
    56. if (select name from sys.syscolumns where name=@ColumnName and id=OBJECT_ID(@TableName)) is not null
    57. set @rt=1
    58. return @rt
    59. end
    60. go
    61. --------------------------------------------------
    62. --  mfn_GetColumnIndexes
    63. --  功能:查询某个字段的所有索引
    64. --  入口:
    65. --      @TableName NVARCHAR(128) -- 表名
    66. --      @ColumnName NVARCHAR(128) -- 列名(字段名)
    67. --  出口:返回一个结果集:
    68. --      id int -- 序号,从1开始
    69. --      name nvarchar(128) -- 索引名称
    70. --------------------------------------------------
    71. if OBJECT_ID(N'dbo.mfn_GetColumnIndexes', N'TF') is not null
    72. drop function dbo.mfn_GetColumnIndexes
    73. go
    74. create function dbo.mfn_GetColumnIndexes(@TableName NVARCHAR(128), @ColumnName NVARCHAR(128))
    75. returns @ret table
    76. (
    77. id int,
    78. name NVARCHAR(128)
    79. )
    80. as
    81. begin
    82. declare @tid int, @colid int
    83. -- 先查询出表id和列id
    84. select @tid=OBJECT_ID(@tablename)
    85. select @colid=colid from sys.syscolumns where id=@tid and name=@columnname
    86. -- 查询出索引名称
    87. insert into @ret select ROW_NUMBER() OVER(ORDER BY cols.index_id) as id, inds.name idxname from sys.index_columns cols
    88. left join sys.indexes inds on cols.object_id=inds.object_id and cols.index_id=inds.index_id
    89. where cols.object_id=@tid and column_id=@colid
    90. return
    91. end
    92. go
    93. --------------------------------------------------
    94. --
    95. --  mp_DropColumnIndexes
    96. --  功能:删除指定列的所有索引
    97. --  入口:
    98. --      @TableName NVARCHAR(128) 表名
    99. --      @ColumnName NVARCHAR(128) 列名
    100. --------------------------------------------------
    101. if OBJECT_ID(N'dbo.mp_DropColumnIndexes', N'P') is not null
    102. drop procedure dbo.mp_DropColumnIndexes
    103. go
    104. create procedure dbo.mp_DropColumnIndexes
    105. @TableName NVARCHAR(128),
    106. @ColumnName NVARCHAR(128)
    107. as
    108. begin
    109. if OBJECT_ID(N'#t', N'TB') is not null
    110. drop table #t
    111. create table #t
    112. (
    113. id int,
    114. name nvarchar(128)
    115. )
    116. insert into #t select * from mfn_GetColumnIndexes(@TableName, @ColumnName)
    117. -- 删除索引
    118. declare @i int, @imax int, @idxname nvarchar(128)
    119. select @i=1, @imax=COALESCE(max(id), 0) from #t
    120. while @i<=@imax
    121. begin
    122. select @idxname=name from #t
    123. EXEC('drop index ' + @idxname + ' on ' + @tablename)
    124. set @i=@i+1
    125. end
    126. drop table #t
    127. end
    128. go
    129. ------------------------------------------------
    130. --  mp_DropColConstraintAndIndex
    131. --  功能:删除指定字段的所有约束和索引
    132. --  入口:
    133. --      @TableName NVARCHAR(128)    -- 表名
    134. --      @ColumnName NVARCHAR(128)   -- 列名
    135. ------------------------------------------------
    136. if OBJECT_ID(N'dbo.mp_DropColConstraintAndIndex', N'P') is not null
    137. drop procedure dbo.mp_DropColConstraintAndIndex
    138. go
    139. create procedure dbo.mp_DropColConstraintAndIndex
    140. @TableName NVARCHAR(128),
    141. @ColumnName NVARCHAR(128)
    142. as
    143. begin
    144. exec dbo.mp_DropColConstraint @TableName, @ColumnName
    145. exec dbo.mp_DropColumnIndexes @TableName, @ColumnName
    146. end
    147. go

MSSQL 如何删除字段的所有约束和索引的更多相关文章

  1. mysql 在已存在的表中添加/删除字段约束AUTO_INCREMENT遇到的问题

    1. 在已存在的表中添加字段约束AUTO_INCREMENT修饰符 mysql> alter table user modify uid int auto_increment primary k ...

  2. mssql数据库添加,修改,删除字段

    通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smalli ...

  3. MSSQL删除字段时出现 服务器: 消息 5074,级别 16,状态 1,行 1 的解决办法

    有的朋友在做用户维护字段的界面时,肯定发现一个问题,当用脚本:ALTER TABLE 表名 DROP COLUMN 字段名进行删除字段的操作时,会出现“服务器: 消息 5074,级别 16,状态 1, ...

  4. sql 创建表、删除表 增加字段 删除字段操作

    下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助. 新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRI ...

  5. Mysql字段操作—增加字段、删除字段、修改字段名、修改字段类型(约束条件)

    1.增加字段:    alter table   tablename    add   new_field_id   type   not null default '0';     例:     a ...

  6. Oracle 增加修改删除字段与添加注释

    添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...

  7. Oracle 增加修改删除字段

    Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...

  8. .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...

  9. SqlServer2012-创建表、删除表 增加字段 删除字段操作

    新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \'默认值\' nu ...

随机推荐

  1. 你应该知道CSS选择器技巧

    什么是:before和:after? 该如何使用他们? :before是css中的一种伪元素,可用于在某个元素之前插入某些内容. :after是css中的一种伪元素,可用于在某个元素之后插入某些内容. ...

  2. JavaScript之共享onload

    我们知道,当我们将JS代码脚本放到<head></head>标签之间时,这是的js代码加载要先于DOM加载,而我们往往会在JS代码脚本中写一些获取DOM元素的代码,而此时的DO ...

  3. Oracle死锁。

    oracle数据库死锁一般情况下在oracle数据库中不会.但是在程序中可以开启事物没有提交,但是程序报错我们就关了程序在重新调试.但是我们程序总是在执行 comm.ExecuteNonQuery() ...

  4. AlarmManager类的应用

    1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...

  5. 在Windows7防火墙允许指定的端口

    在xp系统的时代,修改防火墙很方便,很简单.windows7或许是做得过于复杂了.当然所谓安全性也是相当于其他之前版本的系统更高了.为什么要打开端口,肯定是在windows7下启动了网络服务,需要开启 ...

  6. oracle 导入txt

    没有Oraclehoume的情况下,执行下环境变量文件 sqlldr userid= DM/DM control = /home/oracle/libc/load.ctl load data infi ...

  7. 2016-09-07 J2EE基础知识之JSP_部分

    1.JSP(Java Server Pages) java服务器页面,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.h ...

  8. 彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    最近我的VS2010不知道怎么回事,平时用的好好的,近期竟然出现了所谓的 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 头痛万分,查了各种资料一 ...

  9. Control的Invoke和BeginInvoke详解

    (一)Control的Invoke和BeginInvoke 我们要基于以下认识: (1)Control的Invoke和BeginInvoke与Delegate的Invoke和BeginInvoke是不 ...

  10. mysql innodb init function error

    150414 16:23:07 [ERROR] Plugin 'InnoDB' init function returned error. 150414 16:23:07 [ERROR] Plugin ...