设计一张表时没有考虑到主键Id及自增长,现又需要,原脚本:

SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[ForbiddenType](
[Id] [int] NOT NULL,
[Type] [nvarchar]() NOT NULL
) ON [PRIMARY] GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'屏蔽类型(0全部)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ForbiddenType', @level2type=N'COLUMN',@level2name=N'Type'
GO

并初始化了表数据:

INSERT [dbo].[ForbiddenType] ([Id], [Type]) VALUES (, N'--All--')
INSERT [dbo].[ForbiddenType] ([Id], [Type]) VALUES (, N'用户评论(客户端展示)')
INSERT [dbo].[ForbiddenType] ([Id], [Type]) VALUES (, N'后台编辑(服务端)')

在此条件下实现后台操作Type与Type对应的值可编辑,要重新修改Id字段属性;

要成为IDENTITY标识列的列只能先被删除然后再添加同名列

----删除列
alter table tablename drop COLUMN id
GO
----添加IDENTITY列
alter table tablename add id int identity(,)
GO
----设置IDENTITY列为主键
alter table tablename add constraint [PK_tablename] PRIMARY KEY CLUSTERED ([id])

但是这样做会改变主键字段在表中的顺序

如果不想改变表中主键的位置,有两种思路,一是删除表后重建;一是不删除,将字段逐个删除再依次添加字段:

看代码:

--修改表ForbiddenType
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[ForbiddenType]')
AND OBJECTPROPERTY(id ,N'IsUserTable') =
)
DROP TABLE [dbo].[ForbiddenType]
GO
CREATE TABLE [dbo].[ForbiddenType]
(
[Id] [int] NOT NULL IDENTITY( ,)
,[TypeId] INT NOT NULL
,[Type] [nvarchar]() NOT NULL
,
) ON [PRIMARY]
-- TypeId字段说明
EXEC sys.sp_addextendedproperty @name=N'MS_Description'
,@value=N'屏蔽类型对应值(类型对应Id)'
,@level0type=N'SCHEMA'
,@level0name=N'dbo'
,@level1type=N'TABLE'
,@level1name=N'ForbiddenType'
,@level2type=N'COLUMN'
,@level2name=N'TypeId'
-- Type字段说明
EXEC sys.sp_addextendedproperty @name=N'MS_Description'
,@value=N'屏蔽类型'
,@level0type=N'SCHEMA'
,@level0name=N'dbo'
,@level1type=N'TABLE'
,@level1name=N'ForbiddenType'
,@level2type=N'COLUMN'
,@level2name=N'Type' INSERT INTO [dbo].[ForbiddenType]
(
TypeId
,TYPE
)
VALUES
( ,'用户评论(客户端展示)'
)
INSERT INTO [dbo].[ForbiddenType]
(
TypeId
,TYPE
)
VALUES
( ,'后台编辑(服务端)'
)
GO
TRUNCATE TABLE ForbiddenType  --清空数据库表数据
--删除表中列Type的描述属性:
EXEC sp_dropextendedproperty 'MS_Description',
'SCHEMA',
dbo,
'TABLE',
'ForbiddenType',
'COLUMN',
TYPE
GO
ALTER TABLE ForbiddenType DROP COLUMN Id
GO
--添加自增的Id列并设为主键
ALTER TABLE ForbiddenType ADD [IDs] [int] NOT NULL IDENTITY(, )
EXEC sp_rename 'ForbiddenType.[IDs]',
'Id',
'COLUMN';
ALTER TABLE ForbiddenType ADD CONSTRAINT [PK_ForbiddenType] PRIMARY KEY
CLUSTERED([Id])
ALTER TABLE ForbiddenType ADD [TypeId] [int] NOT NULL
GO ALTER TABLE ForbiddenType DROP COLUMN TYPE
ALTER TABLE ForbiddenType ADD TYPE [nvarchar]() NOT NULL
GO EXEC sys.sp_addextendedproperty @name = N'MS_Description',
@value = N'屏蔽类型对应值(类型对应Id)',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'TABLE',
@level1name = N'ForbiddenType',
@level2type = N'COLUMN',
@level2name = N'TypeId'
-- Type字段说明
EXEC sys.sp_addextendedproperty @name = N'MS_Description',
@value = N'屏蔽类型',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'TABLE',
@level1name = N'ForbiddenType',
@level2type = N'COLUMN',
@level2name = N'Type'
GO
INSERT INTO [dbo].[ForbiddenType]
(
TypeId,
TYPE
)
VALUES
(
,
'用户评论(客户端展示)'
)
INSERT INTO [dbo].[ForbiddenType]
(
TypeId,
TYPE
)
VALUES
(
,
'后台编辑(服务端)'
)

对于一张表,想要添加与删除主键,可参见下面

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主键名]') and OBJECTPROPERTY(object_id(N'[列名]'), N'IsPrimaryKey') = )
ALTER TABLE 表名 DROP CONSTRAINT [主键名]
ALTER TABLE 表名 ADD CONSTRAINT [新主键名] PRIMARY KEY ([列名]) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PK_orders]') and OBJECTPROPERTY(OBJECT_ID(N'dbo.[orders].[pi_no]'), N'IsPrimaryKey') = )
ALTER TABLE orders DROP CONSTRAINT [PK_orders]
ALTER TABLE orders ADD CONSTRAINT [PK_orders] PRIMARY KEY ([form_no]) ON [PRIMARY]

SQL修改表结构之添加主键,添加IDENTITY属性的更多相关文章

  1. SQL Server 创建表 添加主键 添加列常用SQL语句

    --删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1, ...

  2. 创建表 添加主键 添加列常用SQL语句

    --删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段 ...

  3. SQL Server 创建表 添加主键 添加列常用SQL语句【转】

    --删除主键alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名 ...

  4. 获取SqlServer2005表结构(字段,主键,外键,递增,描述)

    1.获取表的基本字段属性 --获取SqlServer中表结构 SELECT syscolumns.name,systypes.name,syscolumns.isnullable, syscolumn ...

  5. SQL修改表结构

    --(1)向数据库Student表中添加Name字段 use MR_NXT alter table student add Name char(20) --(2)将Student表中Name的字段的数 ...

  6. Sql 修改表结构

    添加字段 alter table 表名 add 字段名 nvarchar(100) not null 修改字段 alter table 表名 alter column 字段名 int not null ...

  7. sql修改表结构、临时表应用

    alter table dbo.P_ZPROMOTION_DOC_ITEMS_TEMP alter column MCRANK  varchar(20); 方法一: use testdb --创建局部 ...

  8. SQL批量添加主键脚本

    --SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...

  9. Oracle 给表添加主键和使ID自增、触发器、创建结构一样的表

    1.关于主键:在建表时指定primary key字句即可:create table test( id number(6) primary key, name varchar2(30));如果是对于已经 ...

随机推荐

  1. 2015年p2p网络借贷平台的发展现状

    2015年春暖花开,莺飞草长,股市大涨大跌起起落落,P2P网络借贷收到越来越多的人关注,P2P网络借贷平台是p2p借贷与网络借贷相结合的金 融服务网站,这么多P2P网络借贷平台排我们应该如何选择呢?小 ...

  2. hbase shell 常用命令

    进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之 ...

  3. 《精解Windows 10》

    <精解Windows 10>全面深入讲解Windows 10操作系统的使用方法.本书共计14章内容.第一章简述Windows 10操作系统的一些变革:第二章介绍Modern 2.0界面的体 ...

  4. 如何用js实现截取一个字符串中的数字

    比如var v ="我要提问1098";var v="我0要提问"var v="我还是要提问987"等我想要里边的 1098 ,0, 987 ...

  5. linux命令学习-复制(cp,scp)

    linux为我们提供了两个用于文件的copy的命令,一个是cp,一个是scp.但是它们略有不同: cp主要用于在同一台电脑上,在不同的目录之间来回copy文件,scp主要是在不同的linux系统之间来 ...

  6. 安装StarUML 及使用时序图(Sequence Diagram)和用例图(use case diagram)

    时序图 用例图

  7. memcached缓存知识简单梳理

    memcached工作原理基本概念:slab,page,chunk.slab,是一个逻辑概念.它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同s ...

  8. javascript js string.Format()收集

    方案1http://www.cnblogs.com/loogn/archive/2011/06/20/2085165.html String.prototype.format = function(a ...

  9. 关于js中onclick字符串传参问题

    规则: 外变是“”,里面就是‘’外边是‘’,里边就是“”   示例: var a="111"; var html="<a onclick='selecthoods( ...

  10. Go 命令之 godep

    本文参考:http://www.cnblogs.com/me115/p/5528463.html#h20 http://studygolang.com/articles/4385 关于Godep 发现 ...