SQL修改表结构之添加主键,添加IDENTITY属性
设计一张表时没有考虑到主键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属性的更多相关文章
- SQL Server 创建表 添加主键 添加列常用SQL语句
--删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1, ...
- 创建表 添加主键 添加列常用SQL语句
--删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段 ...
- SQL Server 创建表 添加主键 添加列常用SQL语句【转】
--删除主键alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名 ...
- 获取SqlServer2005表结构(字段,主键,外键,递增,描述)
1.获取表的基本字段属性 --获取SqlServer中表结构 SELECT syscolumns.name,systypes.name,syscolumns.isnullable, syscolumn ...
- SQL修改表结构
--(1)向数据库Student表中添加Name字段 use MR_NXT alter table student add Name char(20) --(2)将Student表中Name的字段的数 ...
- Sql 修改表结构
添加字段 alter table 表名 add 字段名 nvarchar(100) not null 修改字段 alter table 表名 alter column 字段名 int not null ...
- sql修改表结构、临时表应用
alter table dbo.P_ZPROMOTION_DOC_ITEMS_TEMP alter column MCRANK varchar(20); 方法一: use testdb --创建局部 ...
- SQL批量添加主键脚本
--SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...
- Oracle 给表添加主键和使ID自增、触发器、创建结构一样的表
1.关于主键:在建表时指定primary key字句即可:create table test( id number(6) primary key, name varchar2(30));如果是对于已经 ...
随机推荐
- CentOS 升级内核
因为要安装go,尝试升级内核到 2.6.32.61,出现了一些问题,参考如下文档,多谢各位 http://liaozy.blog.51cto.com/921527/553921 http://www. ...
- Lua面向对象编程
Lua中的table就是一种对象,看以下一段简单的代码: , b = } , b = } local tb3 = tb1 if tb1 == tb2 then print("tb1 == t ...
- redis watch multi exec 关系
EXEC 执行所有事务块内的命令. 假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么EXEC 命令只在这个(或这些) key 没有 ...
- 迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板
开发板光盘资料包含:原理图(PDF格式).底板PCB(Allegro格式).驱动程序源码.芯片和LCD数据手册.开发环境.产品使用手册. 4412开发板简介: iTOP-Exynos4412开发板采用 ...
- 教你一招 - 如何给nopcommerce做一套自己的主题
nopcommerce拥有一套不错的模板机制,可以让你快速的做一套属于自己的主题.\Presentation\Nop.Web下面有个Themes文件夹,这里面就是放主题的地方,每个主题对应一个文件夹, ...
- 漫谈计算摄像学 (一):直观理解光场(Light Field)
什么是计算摄像学 计算摄像学(Computational Photography)是近年来越来越受到注意的一个新的领域,在学术界早已火热.本来计算摄像学的业界应用在群众中一直没什么知名度,直到Lytr ...
- 关于SVN版本分支合并的知识
分支的合并类型 合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里.如果当前工作副本是主干,则合并的范围是分支上的改动, ...
- (转载)java多态(2)-------Java转型(向上或向下转型)
5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类), ...
- css常用中文字体的英文名称写法
我们知道网页中使用中文字体最好用其对应的英文名称,这样可以避免出现编码问题导致样式中的中文名称出现乱码,从而不识别.下面是网页中常用的中文字体所对应的英文名称.留着,不用翻资料了 中文 英文 宋体 S ...
- IIS mime类型
参考网站:http://www.iwms.net/n1381c2.aspx 以下例子为iis6.0 下载安卓.苹果安装包时候,需要添加mime类型才可以下载,否则访问不到 安卓 .apk appli ...