如题。

解决方案 »

  1.   

    ALTER TABLE TableName
    DROP COLUMN ColumnName
    GO
      

  2.   


    --邹老大的存储过程。
    CREATE PROC p_DropIDENTITY
    @TableName sysname --要处理的表名
    AS
    IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0
    BEGIN
    RAISERROR('"%s" 必须是当前数据库中已经存在的用户表',12,16,@TableName)
    RETURN
    END--标识列转换处理检查
    DECLARE @s nvarchar(1000),@FieldName sysname,@bkFieldName sysname,@sql nvarchar(4000)
    SELECT @FieldName=QUOTENAME(c.name),
    @bkFieldName=CAST(NEWID() as char(36)),
    @s=@FieldName+N' '+QUOTENAME(t.name)
    +CASE WHEN t.name LIKE '%int' THEN N''
    ELSE N'('+CAST(c.prec as varchar)
    +N','+CAST(c.scale as varchar)+N')'
    END
    FROM sysobjects o,syscolumns c,systypes t
    WHERE o.name=@TableName
    AND o.id=c.id
    AND c.xusertype=t.xusertype
    AND c.status=0x80
    IF @@ROWCOUNT=0
    BEGIN
    RAISERROR(N'表 "%s" 中无标识列',1,16,@TableName)
    RETURN
    END--修改标识列名
    SET @sql=QUOTENAME(@TableName)+N'.'+@FieldName
    EXEC sp_rename @sql,@bkFieldName,N'COLUMN'--转换为标识列处理
    SELECT @TableName=QUOTENAME(@TableName),
    @bkFieldName=QUOTENAME(@bkFieldName)
    EXEC('ALTER TABLE '+@TableName+N' ADD '+@s)
    EXEC('UPDATE '+@TableName+N' SET '+@FieldName+N'='+@bkFieldName+N'
    ALTER TABLE '+@TableName+N' DROP COLUMN '+@bkFieldName)
    RAISERROR(N'表 "%s" 中的标识列 "%s" 已经转换为普通列',1,16,@TableName,@FieldName)
      

  3.   

    http://community.csdn.net/Expert/topic/4715/4715178.xml?temp=.5784265
      

  4.   

    想複雜了Create Table TEST(ID Int Identity(1,1),Name Varchar(50))
    Insert TEST Select 'liu,jun,lyg'
    Union All Select 'bb,aa'
    Union All Select 'cc,dd,ee'
    GO
    Alter Table TEST Drop Column IDSelect *From TEST
    GO
    Drop Table TEST
      

  5.   

    Sorry,问题写错了。
    需求更正为如何将一列自增列改为非自增。
    不想用脚本变更保存下的那段长的脚本,希望手写。
      

  6.   

    方法一:
    --邹老大的存储过程。
    CREATE PROC p_DropIDENTITY
    @TableName sysname --要处理的表名
    AS
    IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),N'IsUserTable'),0)=0
    BEGIN
    RAISERROR('"%s" 必须是当前数据库中已经存在的用户表',12,16,@TableName)
    RETURN
    END--标识列转换处理检查
    DECLARE @s nvarchar(1000),@FieldName sysname,@bkFieldName sysname,@sql nvarchar(4000)
    SELECT @FieldName=QUOTENAME(c.name),
    @bkFieldName=CAST(NEWID() as char(36)),
    @s=@FieldName+N' '+QUOTENAME(t.name)
    +CASE WHEN t.name LIKE '%int' THEN N''
    ELSE N'('+CAST(c.prec as varchar)
    +N','+CAST(c.scale as varchar)+N')'
    END
    FROM sysobjects o,syscolumns c,systypes t
    WHERE o.name=@TableName
    AND o.id=c.id
    AND c.xusertype=t.xusertype
    AND c.status=0x80
    IF @@ROWCOUNT=0
    BEGIN
    RAISERROR(N'表 "%s" 中无标识列',1,16,@TableName)
    RETURN
    END--修改标识列名
    SET @sql=QUOTENAME(@TableName)+N'.'+@FieldName
    EXEC sp_rename @sql,@bkFieldName,N'COLUMN'--转换为标识列处理
    SELECT @TableName=QUOTENAME(@TableName),
    @bkFieldName=QUOTENAME(@bkFieldName)
    EXEC('ALTER TABLE '+@TableName+N' ADD '+@s)
    EXEC('UPDATE '+@TableName+N' SET '+@FieldName+N'='+@bkFieldName+N'
    ALTER TABLE '+@TableName+N' DROP COLUMN '+@bkFieldName)
    RAISERROR(N'表 "%s" 中的标识列 "%s" 已经转换为普通列',1,16,@TableName,@FieldName)
    GO
    EXEC p_DropIDENTITY  你的表名
      

  7.   

    Create Table TEST(ID Int Identity(1,1),Name Varchar(50))
    Insert TEST Select 'liu,jun,lyg'
    Union All Select 'bb,aa'
    Union All Select 'cc,dd,ee'
    GO
    --方法二
    --1、增加一个int类型的列
    Alter  Table TEST  Add NID Int
    GO
    --2、更新新列的数据为自增列的数据
    Update TEST Set NID=ID
    --3、删除自增列
    Alter Table TEST Drop Column ID
    --4、更改新列名为原自增列的列名
    EXEC sp_rename N'TEST.NID','ID',N'column'
    GO
    Drop Table TEST
      

  8.   

    sp_configure 'allow update',1
    reconfigure with override
    go
    update syscolumns set colstat=0 where id=object_id('tablename') and colstat=1
    go
    sp_configure 'allow update',0
    reconfigure with override
      

  9.   

    identity属性没法删除,可以删除这列,重新添加一列
      

  10.   

    Create Table TEST(ID Int Identity(1,1),Name Varchar(50))
    Insert TEST Select 'liu,jun,lyg'
    Union All Select 'bb,aa'
    Union All Select 'cc,dd,ee'
    GO
    --方法三
    EXEC sp_configure 'Allow update',1
    RECONFIGURE WITH OVERRIDE
    GO
    Update syscolumns set colstat=0 where colstat=1 and id=object_id('TEST')
    EXEC sp_configure 'Allow update',0
    RECONFIGURE WITH OVERRIDE
    GO
    Drop Table TEST
      

  11.   

    --1.创建表
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[a]
    GOCreate TABLE [dbo].[a] (
        [id] [int] NOT NULL ,
        [title] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
    --2.加identity属性
    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_a
        (
        id int NOT NULL IDENTITY (1, 1),
        title char(10) NULL
        )  ON [PRIMARY]
    GO
    SET IDENTITY_Insert dbo.Tmp_a ON
    GO
    IF EXISTS(Select * FROM dbo.a)
         EXEC('Insert INTO dbo.Tmp_a (id, title)
            Select id, title FROM dbo.a TABLOCKX')
    GO
    SET IDENTITY_Insert dbo.Tmp_a OFF
    GO
    Drop TABLE dbo.a
    GO
    EXECUTE sp_rename N'dbo.Tmp_a', N'a', 'OBJECT'
    GO
    Alter TABLE dbo.a ADD CONSTRAINT
        PK_a PRIMARY KEY CLUSTERED 
        (
        id
        ) ON [PRIMARY]GO
    COMMIT
    --3.去掉identity属性
    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_a
        (
        id int NOT NULL,
        title char(10) NULL
        )  ON [PRIMARY]
    GO
    IF EXISTS(Select * FROM dbo.a)
         EXEC('Insert INTO dbo.Tmp_a (id, title)
            Select id, title FROM dbo.a TABLOCKX')
    GO
    Drop TABLE dbo.a
    GO
    EXECUTE sp_rename N'dbo.Tmp_a', N'a', 'OBJECT'
    GO
    Alter TABLE dbo.a ADD CONSTRAINT
        PK_a PRIMARY KEY CLUSTERED 
        (
        id
        ) ON [PRIMARY]GO
    COMMIT
      

  12.   

    还是这样子好了
    1.给表添加一列
    2.update id列的值给新加列
    3.删除id列
    4.重命名新加列为id
      

  13.   

    既然这么麻烦,我还是直接用sql manage studio生成的变更脚本好了,结帖。