原文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. node.js的一些知识

    什么是node.js node.js是构建于chrome浏览器v8引擎上的一个js运行环境 可以解析和执行js代码 可以当做另一种上下文,脱离浏览器环境(后端)运行js代码,而代码解析就是基于V8引擎 ...

  2. notepad++ 必装插件

    nppftp ;FTP客户端,你懂的: explorer:设置常用文件链接:打开当前文件路径:

  3. 标准模板库——IO库

    IO库设施: . istream(输入流)类型,提供输入操作. . ostream(输出流)类型,提供输出操作. . cin,一个istream对象,从标准输入读取数据. . cout,一个ostre ...

  4. Hive入门之UDFS函数

    一.UDFS函数介绍 1. 基本UDF (1)SHOWFUNCTIONS:这个用来熟悉未知函数. DESCRIBE FUNCTION<function_name>; (2)A IS NUL ...

  5. R与数据分析旧笔记(十七) 主成分分析

    主成分分析 主成分分析 Pearson于1901年提出的,再由Hotelling(1933)加以发展的一种多变量统计方法 通过析取主成分显出最大的个别差异,也用来削减回归分析和聚类分析中变量的数目 可 ...

  6. hdu 1823 Luck and Love 二维线段树

    题目链接 很裸的题, 唯一需要注意的就是询问时给出的区间并不是l<r, 需要判断然后交换一下, WA了好多发... #include<bits/stdc++.h> using nam ...

  7. 个人收集资料整理-WinForm

    [2016-03-23 20:29:56] 别人收集常用: http://www.cnblogs.com/babycool/p/3541192.html

  8. Mac 键盘快捷键

    标签页和窗口快捷键 ⌘-N 打开新窗口. ⌘-T 打开新标签页. ⌘-Shift-N 在隐身模式下打开新窗口. 按 ⌘-O,然后选择文件. 在 Google Chrome 浏览器中打开计算机中的文件. ...

  9. Toolkit 一键激活Office 2010方法及Office 2010 Toolkit工具下载

    Office 2010激活的方法很多,但推荐使用本站亲测,可永久使用的两种方法,随便使用哪一种,一个不行就换另外一个.基本上只要Office 2010正常安装了,下面两种方法的任何一种都可以正常激活. ...

  10. 谷歌日志库GLog 使用说明

    1 引用头文件 加载库 #include <glog/include/logging.h> #pragma comment(lib,"libglog.lib") 2 初 ...