[SQL SERVER] 修改加了约束/索引的列
来源:互联网 发布:それに それで知乎 编辑:程序博客网 时间:2024/04/29 08:25
if exists(select 1 from sysobjects tbl with (nolock), syscolumns col with (nolock) where tbl.xtype = 'U' and tbl.id = col.id and col.name = 'code_key' and length < 20 and tbl.name = 'sygencode')
begin
declare @name varchar(256)
set @name = ''
select @name = tbl.name from sysobjects tbl with (nolock) where tbl.parent_obj
in ( select id from sysobjects with (nolock) where name ='sygencode') and
xtype ='PK'
if @name <> ''
begin
exec('ALTER TABLE sygencode DROP CONSTRAINT ' + @name)
if exists(select 1 from sysindexes a with (nolock) where a.name = @name)
exec('DROP INDEX sygencode.' + @name)
end
if exists(select 1 from sysindexes b with (nolock)
where b.name = 'sygencode_index')
exec('DROP INDEX sygencode.sygencode_index')
exec('ALTER TABLE sygencode ALTER COLUMN code_key varchar(20) not null')
if @name <> ''
begin
exec('ALTER TABLE sygencode ADD CONSTRAINT ' + @name +
' PRIMARY KEY (code_name, code_key, com_code)')
if not exists (select 1 from sysindexes a with (nolock)
where a.name = @name)
exec('CREATE INDEX ' + @name + ' ON sygencode (code_name,
code_key, com_code)')
end
if not exists(select 1 from sysindexes b with (nolock)
where b.name = 'sygencode_index')
exec('CREATE INDEX sygencode_index ON sygencode (code_name, code_key)')
end
目的: sygencode表中有一个field code_key, 原来是 char(10) 的, 现在发现不够用, 所以想改为 varchar(20)
问题: 表中有四个字段 code_name, code_key, next_code, com_code 其中一个主键约束是在(code_name, code_key, com_code), 两个索引(因为历史原因, 有些数据库只加了一个索引)其中一个为PK的索引, 另一个为sygencode_index, 因为加了约束和索引, 所以不可以直接alter column
解决: 在alter column前先将约束/索引删除, 将其名称保留, 在alter table后补回缺点: 必须知道原先的索引/主键为哪几个字段
P.S.: 使用 sp_help,sp_helpindex 查看索引, 表结构
- [SQL SERVER] 修改加了约束/索引的列
- SQL SERVER 带包含列的索引
- 关于信息重复SQL SERVER所加的检查约束
- SQL Server 约束 修改表
- SQL Server 判断及增加列的默认值约束
- SQL Server 标识列的修改
- SQL Server里的主键、唯一性约束、聚集索引
- SQL Server (列级约束与表级约束)
- sql server 修改列名
- SQL Server 查看列,添加列,修改列,删除列
- SQL Server 2005------表,列,约束,主键相关的实用T-SQL
- SQL Server如果跟踪每一列的修改计数的?
- T-sql sql server 设置主键约束、标示列、唯一约束、默认值、约束、创建表
- T-sql sql server 设置主键约束、标示列、唯一约束、默认值、约束、创建表
- SQL Server 2016:内存列存储索引
- oracle和sql server 修改列长度的区别
- MySQL 修改被外键约束的列
- SQL Server修改标识列方法 如自增列的批量化修改
- ASP.NET中常用的三十三种代码
- ILMerge的使用
- ERP系统选择14方略
- js实现页面跳转的几种方式
- DLL动态调用
- [SQL SERVER] 修改加了约束/索引的列
- extjs学习
- c#套接字编程(客户端)
- VC小技巧(http://topic.csdn.net/u/20080509/15/3bfad216-4644-440d-a540-fbcde4cb4405.html)
- 数据库的备份
- JavaBean简介---------------------JavaBean是什么
- Javascript学习笔记之操作系统以及浏览器验证篇
- 基于Linux的嵌入式文件系统构建与设计
- SQL 2005导出EXCEL