问如何在脚本改表字段结构

[复制链接]
查看11 | 回复5 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
CREATE TABLE [dbo].[add](

[Column 0] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[Column 1] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[Column 2] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[Column 3] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
表结构如上,
1其中向该表插入记录,所以插入前需要手工把[id] [int] IDENTITY(1,1)设置取消
如何用脚本实现
2加完数据后如何再还原 [id] [int] IDENTITY(1,1)?
如何用脚本实现
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
SET IDENTITY_INSERT add ON
GO
INSERT add([Column 0],[Column 1],[Column 2],[Column 3],id)
VALUES(@COL0,@COL1,@COL3,@ID)
...
GO
SET IDENTITY_INSERT add OFF
GO
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
810,向你学习了.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
请具体一点 下面没有办法执行
‘SET IDENTITY_INSERT add ON
GO
INSERT add([Column 0],[Column 1],[Column 2],[Column 3],id)
VALUES(@COL0,@COL1,@COL3,@ID)
...
GO
SET IDENTITY_INSERT add OFF
GO‘
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
如何用语句添加或去除表字段的自增属性
问题点数:50、回复次数:16
Top

1 楼pengdali()回复于 2003-09-03 08:53:53 得分 20去标识

alter table tablename add id1 int

update tablename set id1=id

alter table tablename drop column id

exec sp_rename 'tablename.id1','id'
Top
2 楼pengdali()回复于 2003-09-03 08:54:24 得分 0 加标识

有数据的话
ALTER TABLE 表 ADD 编号1 bigint identity(1,1) not null
go
SET IDENTITY_INSERT 表 ON
go
update 表 set 编号1=编号
go
SET IDENTITY_INSERT 表 OFF
go
ALTER TABLE 表 DROP COLUMN 编号
go
exec sp_rename '表.编号1','编号'
go
Top
3 楼txlicenhe(马可)回复于 2003-09-03 08:58:44 得分 101:alter table yourTable add idd int
update yourTable set idd = id
alter table yourTable drop column id
sp_rename 'yourTable.[idd]','id',COLUMN
Top
4 楼tiny_yan(自由裸体)回复于 2003-09-03 08:59:32 得分 10添加表字段的自增属性

create table test1 (id int,cc varchar(2))
go
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_test1
(
id int NOT NULL IDENTITY (1, 1),
cc varchar(2) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_test1 ON
GO
IF EXISTS(SELECT * FROM dbo.test1)
EXEC('INSERT INTO dbo.Tmp_test1 (id, cc)
SELECT id, cc FROM dbo.test1 TABLOCKX')
GO
SET IDENTITY_INSERT dbo.Tmp_test1 OFF
GO
DROP TABLE dbo.test1
GO
EXECUTE sp_rename N'dbo.Tmp_test1', N'test1', 'OBJECT'
GO
COMMIT
Top
5 楼txlicenhe(马可)回复于 2003-09-03 08:59:37 得分 0 2: alter table yourTable add id int identity(1,1)
Top
6 楼tiny_yan(自由裸体)回复于 2003-09-03 09:01:40 得分 10去除表字段的自增属性

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_test1
(
id int NOT NULL,
cc varchar(2) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.test1)
EXEC('INSERT INTO dbo.Tmp_test1 (id, cc)
SELECT id, cc FROM dbo.test1 TABLOCKX')
GO
DROP TABLE dbo.test1
GO
EXECUTE sp_rename N'dbo.Tmp_test1', N'test1', 'OBJECT'
GO
COMMIT
Top
7 楼tiny_yan(自由裸体)回复于 2003-09-03 09:18:00 得分 0 我的两个方法是SQL server企业管理器的做法,如果表中已有大量数据,耗时太多。
不知pengdali(大力 V2.0)用alter table的方法效率如何?
Top
8 楼friendliu(无为)回复于 2003-09-03 09:29:01 得分 0 alter table tablename add test int identity(1,1) not null

Top
9 楼cloudchen(cloudchen)回复于 2003-09-03 10:15:45 得分 0 先加一个字段,然后把原先的id复制到新的字段中,删除原来的id,再把新的更名为id

就是大力的做法!我就是学大力的!
Top
10 楼zarge(鲨去来兮)回复于 2003-09-03 10:28:58 得分 0 企业管理器的做法是把数据拷贝到临时表,重建表,然后把数据拷回来
可能效率要低些
Top
11 楼st_2000(破猫)回复于 2003-11-07 16:10:50 得分 0 标识

有数据的话
ALTER TABLE 表 ADD 编号1 bigint identity(1,1) not null
go
SET IDENTITY_INSERT 表 ON
go
update 表 set 编号1=编号
go
SET IDENTITY_INSERT 表 OFF
go
ALTER TABLE 表 DROP COLUMN 编号
go
exec sp_rename '表.编号1','编号'
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行