if exists (select * from sysobjects where id = object_id(N'[dbo].[Category]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Category]
GO
CREATE TABLE [dbo].[Category] (
[ID] [int] IDENTITY(1,1) NOT NULL ,
[Name] [nvarchar] (128) NULL ,
[Spec] [nvarchar] (64) NULL ,
[ParentID] [int] NULL ,
[ConsumeCategoryID] [int] NULL ,
[ConsumeID] [int] NULL ,
[Type] [tinyint] NULL ,
[Comment] [nvarchar] (256) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Category] WITH NOCHECK ADD
CONSTRAINT [PK_Category] PRIMARY KEY NONCLUSTERED
(
[ID]
) ON [PRIMARY]
GO
1。如何把自动增字段设置为不自增?
2。如何把一个不自增的字段设置位自增?
比如上面的ID字段
问题点数:100、回复次数:20
Top
1 楼cow8063(天涯远不远?不远!人在天涯,天涯怎会远)回复于 2003-05-27 09:57:36 得分 2IDENTITY把这个要与不要不 就行了
Top
2 楼nik_Amis(...)回复于 2003-05-27 10:04:59 得分 0 我的意思是已经创建了表,表里面有一个字段是自增的
如何通过脚本把它设置成不自增的字段(一般的int字段,但是还是主键)
Top
3 楼joygxd(不经风雨怎见彩虹)回复于 2003-05-27 10:06:52 得分 0 手动设不是很好吗?
Top
4 楼joygxd(不经风雨怎见彩虹)回复于 2003-05-27 10:10:07 得分 2ALTER TABLE [dbo].[Category] ALTER COLUMN [ID] ADD ROWGUIDCOL
Top
5 楼nik_Amis(...)回复于 2003-05-27 10:16:29 得分 0 就是说
1。如何设置一个int字段为字增字段
2。如何设置一个字增字段为普通的int字段
前提,表里面的数据不能丢失
Top
6 楼joygxd(不经风雨怎见彩虹)回复于 2003-05-27 10:28:17 得分 0 ALTER TABLE [dbo].[a] add [num] INT IDENTITY
Top
7 楼HawaiiLeo(罗马数字)回复于 2003-05-27 10:29:39 得分 20select * into #temp from Category
alert table Category drop column ID
alert table Category add column ID int not null
insert into Category(ID) select ID from #temp
Top
8 楼happydreamer(www.sz.js.cn,www.gyxk.com)回复于 2003-05-27 10:31:28 得分 401 如何把自动增字段设置为不自增
ALTER TABLE Category ADD id2 int
UPDATE Category SET id2=id
ALTER TABLE Category DROP CONSTRAINT [PK_Category]
ALTER TABLE Category DROP COLUMN id
EXEC SP_RENAME 'Category.[id2]', 'id', 'COLUMN'
ALTER TABLE [dbo].[Category] WITH NOCHECK ADD
CONSTRAINT [PK_Category] PRIMARY KEY NONCLUSTERED
(
[ID]
) ON [PRIMARY]
2。如何把一个不自增的字段设置位自增?
ALTER TABLE Category DROP COLUMN id
ALTER TABLE Category ADD id int idetity(1,1)
Top
9 楼nik_Amis(...)回复于 2003-05-27 10:34:14 得分 0 我不是要加一个字段,而是要把现有的int字段改为字增的,或者把现有字增的字段改为普通的int字段.这个字段里的数据不能丢失
Top
10 楼nik_Amis(...)回复于 2003-05-27 10:38:24 得分 0 多谢各位关注
黑兄,是不是没有可以直接设置的方法?
Top
11 楼wgy2008(北极光)回复于 2003-05-27 11:08:32 得分 0 用alter table
Top
12 楼nik_Amis(...)回复于 2003-05-27 11:19:43 得分 0 楼上,怎么用?请问?
Top
13 楼happydreamer(www.sz.js.cn,www.gyxk.com)回复于 2003-05-27 11:28:00 得分 0 企业管理器面可以直接改,它的做法是先生成临时表(id 不为自增),把原来数据插入,然后删除原表,再用sp_rename改名
Top
14 楼nik_Amis(...)回复于 2003-05-27 11:38:43 得分 0 晕,偶知道管理器可以直接改:P
偶希望有个类似于alert column ID int这样的方法,而不用用临时表
嘿嘿,看来别无它法,黑兄的方法偶待会再试试
多谢!
Top
15 楼cow8063(天涯远不远?不远!人在天涯,天涯怎会远)回复于 2003-05-27 11:50:33 得分 2你看看这个。。。。。。。。。。。。。。。
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE ]
[ NULL | NOT NULL ]
table
是要更改的表的名称。如果表不在当前数据库中或者不属于当前用户所拥有,可以显式指定数据库和所有者。
ALTER COLUMN
指定要更改给定列。如果兼容级别是 65 或小于 65,将不允许使用 ALTER COLUMN。有关更多信息,请参见 sp_dbcmptlevel。
要更改的列不能是:
数据类型为 text、image、ntext 或 timestamp 的列。
表的 ROWGUIDCOL 列。
计算列或用于计算列中的列。
被复制列。
用在索引中的列,除非该列数据类型是 varchar、nvarchar 或 varbinary,数据类型没有更改,而且新列大小等于或者大于旧列大小。
用在由 CREATE STATISTICS 语句创建的统计中的列。首先用 DROP STATISTICS 语句删除统计。由查询优化器自动生成的统计会由 ALTER COLUMN 自动除去。
用在 PRIMARY KEY 或 [FOREIGN KEY] REFERENCES 约束中的列。
用在 CHECK 或 UNIQUE 约束中的列,除非用在 CHECK 或 UNIQUE 约束中的可变长度列的长度允许更改。
有相关联的默认值的列,除非在不更改数据类型的情况下允许更改列的长度、精度或小数位数。
有些数据类型的更改可能导致数据的更改。例如,将数据类型为 nchar 或 nvarchar 的列更改为 char 或 varchar 类型,将导致扩展字符的转换。有关更多信息,请参见 CAST 和 CONVERT。降低列的精度和小数位数可能导致数据截断。
column_name
是要更改、添加或除去的列的名称。对于新列,如果数据类型为 timestamp,column_name 可以省略。对于 timestamp 数据类型的列,如果未指定 column_name,将使用名称 timestamp。
new_data_type
是要更改的列的新数据类型。要更改的列的 new_data_type 应符合下列准则:
原来的数据类型必须可以隐式转换为新数据类型。
new_data_type 类型不能为 timestamp。
对 ALTER COLUMN,ANSI 空默认值始终打开;如果没有指定,列将可为空。
对 ALTER COLUMN,ANSI 填充始终打开。
如果要更改的列是标识列,new_data_type 必须是支持标识属性的数据类型。
将忽略 SET ARITHABORT 的当前设置。ALTER TABLE 语句的行为如同 ARITHABORT 选项为 ON 时一样。
precision
是指定数据类型的精度。有关有效精度值的更多信息,请参见精度、小数位数和长度。
scale
是指定数据类型的小数位数。有关有效小数位数值的更多信息,请参见精度、小数位数和长度。
COLLATE
为更改列指定新的排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。有关列表及更多信息,请参见 Windows 排序规则名称 和 SQL 排序规则名称。
COLLATE 子句只能用于更改数据类型为 char、varchar、text、nchar、nvarchar 和 ntext 的列的排序规则。如果未指定,则此列采用数据库的默认排序规则。
若满足下列条件,则 ALTER COLUMN 不能更改排序规则:
检查约束、外键约束或计算列引用了更改列。
在此列上创建了索引、统计或全文索引。更改列的排序规则时,该列上自动创建的统计将除去。
SCHEMABOUND 视图或函数引用了此列。
有关 COLLATE 子句的更多信息,请参见 COLLATE。
NULL | NOT NULL
指定该列是否可接受空值。不允许空值的列只有在指定了默认值的情况下,才能用 ALTER TABLE 语句向表中添加。添加到表中的新列要么允许空值,要么必须指定默认值。
如果新列允许空值,而且没有指定默认值,那么新列在表中每一行都包含空值。如果新列允许空值并且指定了新列的默认值,那么可以使用 WITH VALUES 选项在表中所有现有行的新列中存储默认值。
如果新列不允许空值,那么新列必须具有 DEFAULT 定义,而且新列的所有现有行中将自动装载该默认值。
可在 ALTER COLUMN 语句中指定 NULL 以使 NOT NULL 列允许空值,但 PRIMARY KEY 约束中的列除外。只有列中不包含空值时,ALTER COLUMN 中才可指定 NOT NULL。必须将空值更新为非空值后,才允许执行 ALTER COLUMN NOT NULL 语句,比如:
UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL
如果 ALTER COLUMN 中指定了 NULL 或 NOT NULL,那么必须同时指定 new_data_type [(precision [, scale ])]。如果不更改数据类型、精度和小数位数,请指定列的这些值的当前值。
Top
16 楼psxfghost(哈哈)回复于 2003-05-27 12:29:29 得分 22。如何把一个不自增的字段设置位自增?(若里面有数据)
declare @max_num
select @max_num=max(id) from Category
set @max_num=@max_num+1
ALTER TABLE Category DROP COLUMN id
ALTER TABLE Category ADD id int idetity(@max_num,1)
Top
17 楼psxfghost(哈哈)回复于 2003-05-27 12:44:02 得分 0 2。如何把一个不自增的字段设置位自增?(有数据的)
供你参考一下:
create table temp_table
(
id int,
name varchar(20)
)
insert into temp_table values(3,'1')
insert into temp_table values(4,'1')
insert into temp_table values(5,'1')
select * into #temp from temp_table
go
alter table #temp add temp_id int
go
alter table temp_table add temp_id int identity(1,1)
update #temp set temp_id=id
go
set identity_insert temp_table on
go
delete from temp_table
go
insert into temp_table (temp_id,name) select temp_id,name from #temp
go
ALTER TABLE temp_table DROP COLUMN id
go
exec sp_rename 'temp_table.temp_id','id'
go
select * from temp_table
set identity_insert temp_table off
go
insert into temp_table (name) values(1)
select * from temp_table
drop table temp_table
drop table #temp
Top
18 楼psxfghost(哈哈)回复于 2003-05-27 12:45:42 得分 2设置为不自增按小黑的方法就很好了
^_^
Top
19 楼tj_dns(愉快的登山者)回复于 2003-05-27 13:26:58 得分 301。新增一个INT字段:
ALTER TABLE YOURTABLENAME
ADD COLUMN IID INT
2。将ID字段数据保存到IID字段:
UPDATE YOURTABLENAME SET IID = ID
3。删除ID字段:
ALTER TABLE YOURTABLENAME
DROP COLUMN ID
4。新增一个新的自增字段NID
ALTER TABLE YOURTABLENAME
ADD COLUMN NID INT IDENTITY(1,1) NOT NULL
Top
20 楼nik_Amis(...)回复于 2003-05-27 13:41:37 得分 0 OK,多谢