请问如何使用SQL语句去除字段的递增属性(50分)

  • 主题发起人 主题发起人 sundata
  • 开始时间 开始时间
S

sundata

Unregistered / Unconfirmed
GUEST, unregistred user!
例如TABLE tStudent:
(
[id] [numeric] (18, 0) IDENTITY (1, 1) NOT NULL,
[name] varchar(16) not null
)

去除id字段的递增属性(用SQL语句实现)
 
只要是identity类型的都不能直接用alter修改,而只能刪除
alter table 表名 add 新字段名 int
update 表名 set 新字段名=自增字段名
alter table 表名 drop column 自增字段名
 
to dey-999:
但是这样以来的问题是表递增字段变成了最后一个字段
当使用insert into tTable values()时,就不能成功插入了(字段顺序打乱了)
影响比较大,如何解决
 
在syscolumns里面有个colid属性,那个就是控制字段的顺序的。修改那个就可以了。
 
假设新增加的字段名称是IDFirst,现在需要将该字段与字段ID交换位置:
1,sp_configure 'allow updates',1
2,reconfigure with override
3,update syscolumns set colid=8 where id=210099789 and [name]='IDFirst'
4,update syscolumns set colid=7 where id=210099789 and [name]='ID'
5,update syscolumns set colid=1 where id=210099789 and [name]='IDFirst'
6,sp_configure 'allow updates',0
7,reconfigure with override
注意,其中id为sysobjects中该表的id(select id from sysobjects where [name]=表名称),colid为syscolumns中id=sysobjects.id时字段的顺序,一般情况下是不能改的,同时,1,2,6,7最好单独运行
 
alter tablename drop column id
 
问题: 如何写一段SQL语句去掉一个字段的自增长属性。 ( 积分: 100 )
分类: 数据库-C/S型

来自: freeman2002, 时间: 2004-05-31 8:47:00, ID: 2636676
如何写一段SQL语句去掉一个字段的自增长属性,而不是直接在数据库管理工具上面去修改那个字段。

来自: bjaman, 时间: 2004-05-31 8:55:08, ID: 2636694
SQL Server中的一种安全的修改方法:

If Exists (Select * From sysobjects Where name = N'Table1' And user_name(uid) =
N'dbo')
begin
Select * into temptable From Dbo.Table1 --先把表里面的数据导出到一个临时表里
Drop Table dbo.Table1 --删除掉该表
end
Go
--下面创建新表
CREATE TABLE [dbo].[Table1] (
[id] [int] NOT NULL, -- IDENTITY (1, 1) NOT NULL 比如原来这里是自增字段,现在卸掉了
代码:
 [char] (3)  NULL , 
[sl] [int] NULL 
) ON [PRIMARY] 
GO 

Alter Table dbo.Table1 Add Constraint --设定主键约束 
PK_Table1 Primary Key Clustered 
([id]  ) 
Go 
--下面把前面导出的数据导回修改后的表 
INSERT INTO Table1  (id,code,sl) 
     SELECT id,code,sl 
     FROM tempTable 
Go   

 
来自: Rick.Qin, 时间: 2004-05-31 8:52:49, ID: 2636697  
把原来的表数据导出到del,然后drop掉,再create一个新的table。 

不过,我想问问,为什么要去掉自增标识字段?我觉得这个字段很好用。 
 
来自: jason.lai, 时间: 2004-05-31 8:53:33, ID: 2636703  
alter table table_name 
  drop column_name 
or alter column_name 
 
来自: piao40993470, 时间: 2004-05-31 8:58:53, ID: 2636719  
在某些情况下我们需要Identity类型的字段值不变化,特别是在导数据的时候。 
可以用 
set identity_insert 表名 on 
set identity_insert 表名 off 
来打开或者关闭identity字段的自增或者自减 

 
来自: Rick.Qin, 时间: 2004-05-31 9:02:56, ID: 2636730  
对啊,我想问问piao40993470,那个set identity_insert 表名 on命令在导数据的时候具体的用法。谢谢啊。我也在找更好的方法导入导出数据。 
我现在的方法太笨了 。 
 
来自: freeman2002, 时间: 2004-05-31 9:22:35, ID: 2636787  
sorry,我还想麻烦各位,还有没有办法,不导数据,和删除表重建,而是直接SQL语句在表上修改那个字段的自增长属性。 
 
来自: piao40993470, 时间: 2004-05-31 12:57:31, ID: 2637519  
to  Rick.Qin 
直接在 
set identity_insert 表名 on    /*关闭表的identity属性作用*/ 
导数据SQL........ 
set identity_insert 表名 off  /*打开表的identity属性作用*/ 





to  freeman2002 
如果只是要关闭identity属性的话用 
set identity_insert 表名 on 就可以了, 

难道你的意思是:比如把identity(1,1),改成identity(10,5)或者别的? 
这个就.......... 

 
来自: freeman2002, 时间: 2004-06-06 22:39:57, ID: 2649173  
多人接受答案了。 
 
得分大富翁: bjaman-25,jason.lai-25,piao40993470-25,Rick.Qin-25,
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
927
SUNSTONE的Delphi笔记
S
后退
顶部