救命呀!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

archer123 2003-03-12 02:46:41
我在查询分析器中运行下面的语句
ALTER TABLE admin5 ALTER COLUMN ID int IDENTITY (1, 1) NOT NULL

目的是将现有的一个表的id列改变字段属性为自动编号
但是运行的结果是以下的报错

服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'IDENTITY' 附近有语法错误。

请大侠指明,如果修改
...全文
63 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
archer123 2003-03-13
  • 打赏
  • 举报
回复
大侠相助
archer123 2003-03-13
  • 打赏
  • 举报
回复
大侠相助
archer123 2003-03-13
  • 打赏
  • 举报
回复
大侠相助呀
DreamInIT 2003-03-13
  • 打赏
  • 举报
回复
恐怕只有按ghj1976(蝈蝈俊.net)之建议操作,参看SQL Server Books Online之
Alter Table (T-SQL)条:
ALTER COLUMN
Specifies that the given column is to be changed or altered. ALTER COLUMN is not allowed if the compatibility level is 65 or earlier. For more information, see sp_dbcmptlevel. The altered column cannot be:
A column with a text, image, ntext, or timestamp data type.
The ROWGUIDCOL for the table. --这句表明不可更改为identity列。
蝈蝈俊 2003-03-13
  • 打赏
  • 举报
回复
上面的操作很简单,就是先建立一个符合条件的表,然后迁移数据过去,然后删除原表,然后给新表从命名。
蝈蝈俊 2003-03-13
  • 打赏
  • 举报
回复
下面是用 企业管理器 把table1表的id字段改为自增的sql语句:

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_Table1
(
id int NOT NULL IDENTITY (1, 1),
dd char(10) NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 ON
GO
IF EXISTS(SELECT * FROM dbo.Table1)
EXEC('INSERT INTO dbo.Tmp_Table1 (id, dd)
SELECT id, dd FROM dbo.Table1 TABLOCKX')
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 OFF
GO
DROP TABLE dbo.Table1
GO
EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT'
GO
COMMIT

改之前的表:
CREATE TABLE [dbo].[Table1] (
[id] [int] NULL ,
[dd] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

改后的表:
CREATE TABLE [dbo].[Table1] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[dd] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

archer123 2003-03-13
  • 打赏
  • 举报
回复
up
archer123 2003-03-13
  • 打赏
  • 举报
回复
请大侠相助!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
archer123 2003-03-13
  • 打赏
  • 举报
回复
造成需要进行这样修改的原因是,上传后ID字段的属性发生了改变(原有的自动编号变为了整型),但是我们又不能重新再设ID值(否则信息调用全部出错),只能在原有ID值上修改属性为自动编号
请大侠相助!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
XLYT 2003-03-13
  • 打赏
  • 举报
回复
不对。
如果你原来的列里面写的就是ID,那么你可以增加一个IDENTITY列,来代替原来的ID,如果原来列里面写的不是ID,改成IDENTITY列还不是丢失了原来的数据?这样还不如增加一个新列。所以从这方面分析,SQL不用提供这种更改列的功能。
archer123 2003-03-13
  • 打赏
  • 举报
回复
请大侠写一个例句
XLYT 2003-03-13
  • 打赏
  • 举报
回复
得分两句。先把类型改成INT,然后增加列约束。
weixiao51 2003-03-13
  • 打赏
  • 举报
回复
肯定是数据的问题
检查一下数据是否符合IDENTITY的要求
salonstar 2003-03-13
  • 打赏
  • 举报
回复
你用企业管理器上修改時﹐它也是先建立一個臨時表﹐然后將數據Insert到臨時表﹐再將臨時表改名。所以你可以在Query Analyzer中也只可以將數據導出到另一個表中﹐然后重建此表﹐再將數據導回.
xhh_88 2003-03-13
  • 打赏
  • 举报
回复
配一个ODBC就可以用企业管理器打开远程的数据库了
SophiaWang 2003-03-12
  • 打赏
  • 举报
回复
估计很难!还没找到解决方法~~~
苦恼中~~~~~
archer123 2003-03-12
  • 打赏
  • 举报
回复
帮帮我呀
不然远程的库打不开企业管理器
没法修改了呀
SophiaWang 2003-03-12
  • 打赏
  • 举报
回复
我把数据都删掉还是不成功呢
bomboolin 2003-03-12
  • 打赏
  • 举报
回复
蚂蚁的方法不行吧!
还是右键--设计表,把ID 字段改为int,再在标识上选是,标识种子1,增量1。
但在已有数据的表上改不会成功的吧。
SophiaWang 2003-03-12
  • 打赏
  • 举报
回复
奇怪,ALTER TABLE Table11 ALTER COLUMN ID int都可以
但是ALTER TABLE Table11 ALTER COLUMN ID int IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL就报错!
加载更多回复(7)
期末救命资源!~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

34,593

社区成员

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

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