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));如果是对于已经 ... 
随机推荐
- POI教程之第一讲:创建新工作簿, Sheet 页,创建单元格
			第一讲 Poi 简介 Apache POI 是Apache 软件基金会的开放源码函数库,Poi提供API给java程序对Microsoft Office格式档案读和写的功能. 1.创建新工作簿,并给工 ... 
- loadrunner常用函数
			1.关联函数:web_reg_save_param("session", "LB=value=", "RB=>", LAST); 
- Openwrt LuCI模块练习详细步骤
			前言 又到了成胖子^_^每周一博的时间了.最近在学习openwrt luci方面的知识,为了贯穿整个知识体系,练习题目为: 通过页面配置周期性地往/tmp/addtest文件写入内容和时间戳 1.在w ... 
- 解决在iOS8环境下,当用户关闭定位服务总开关时,无法将APP定位子选项加入定位权限列表的问题
			关键点:- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizati ... 
- 我的NopCommerce之旅(6): 应用启动
			一.基础介绍 Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选文件,该文件包含响应 ASP.NET 或 HTTP 模块所引发的应用程序级别和会话级别事件的代码. Appl ... 
- Web性能优化之图片延迟加载
			来源:微信公众号CodeL 对于一些图片多,页面长的网页来说,如果每次打开页面加载全部的网页内容,页面加载速度势必会受到影响,如果每次打开网页只将网页可视区域的内容加载给用户 ,将大大提高网页浏览速度 ... 
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
			BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ... 
- jquery中的each()方法详解
			each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ... 
- Hamilton回路的判定与构造
			定理1:在一个具有n个顶点的无向连通图G中,如果任意两个顶点的度数之和大于n,则G具有Hamilton回路.此条件为充分条件 定理2:设图G = <V,E>,是Hamilton图,则对于v ... 
- 利用WinPcap模拟网络包伪造飞秋闪屏报文
			起因 不知道从什么时候开始,同事开始在飞秋上发闪屏振动了,后来变本加厉,成了每日一闪.老闪回去也比较麻烦,作为程序猿呢,有没有什么偷懒的办法呢?(同事负责用户体验,不大懂编程).然后尝试了以下思路: ... 
