sqlserver 添加自增主键_如何让sqlserver的自增字段用sql语句打开加1或者关闭

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,多谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值