¥¥¥¥¥¥¥¥¥¥¥¥¥¥关于自增字段¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

nik_Amis 2003-05-27 09:44:40
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字段

...全文
32 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
psxfghost 2003-05-27
  • 打赏
  • 举报
回复
设置为不自增按小黑的方法就很好了
^_^
psxfghost 2003-05-27
  • 打赏
  • 举报
回复
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
psxfghost 2003-05-27
  • 打赏
  • 举报
回复
2。如何把一个不自增的字段设置位自增?(若里面有数据)
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)
cow8063 2003-05-27
  • 打赏
  • 举报
回复
你看看这个。。。。。。。。。。。。。。。


ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ 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 < collation_name >

为更改列指定新的排序规则。排序规则名称既可以是 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 ])]。如果不更改数据类型、精度和小数位数,请指定列的这些值的当前值。
nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
晕,偶知道管理器可以直接改:P
偶希望有个类似于alert column ID int这样的方法,而不用用临时表

嘿嘿,看来别无它法,黑兄的方法偶待会再试试

多谢!
happydreamer 2003-05-27
  • 打赏
  • 举报
回复
企业管理器面可以直接改,它的做法是先生成临时表(id 不为自增),把原来数据插入,然后删除原表,再用sp_rename改名
nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
楼上,怎么用?请问?
wgy2008 2003-05-27
  • 打赏
  • 举报
回复
用alter table
nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
多谢各位关注

黑兄,是不是没有可以直接设置的方法?

nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
我不是要加一个字段,而是要把现有的int字段改为字增的,或者把现有字增的字段改为普通的int字段.这个字段里的数据不能丢失
happydreamer 2003-05-27
  • 打赏
  • 举报
回复
1 如何把自动增字段设置为不自增

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)
HawaiiLeo 2003-05-27
  • 打赏
  • 举报
回复
select * 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
joygxd 2003-05-27
  • 打赏
  • 举报
回复
ALTER TABLE [dbo].[a] add [num] INT IDENTITY
nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
就是说
1。如何设置一个int字段为字增字段
2。如何设置一个字增字段为普通的int字段

前提,表里面的数据不能丢失
joygxd 2003-05-27
  • 打赏
  • 举报
回复
ALTER TABLE [dbo].[Category] ALTER COLUMN [ID] ADD ROWGUIDCOL
joygxd 2003-05-27
  • 打赏
  • 举报
回复
手动设不是很好吗?
nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
我的意思是已经创建了表,表里面有一个字段是自增的
如何通过脚本把它设置成不自增的字段(一般的int字段,但是还是主键)

cow8063 2003-05-27
  • 打赏
  • 举报
回复
IDENTITY把这个要与不要不 就行了
nik_Amis 2003-05-27
  • 打赏
  • 举报
回复
OK,多谢
愉快的登山者 2003-05-27
  • 打赏
  • 举报
回复
1。新增一个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

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧