alter table table_name
    alter column column_name int null
go

解决方案 »

  1.   

    来晚了,不过有一点可以说明一下:int 应该是换成你原有的类型,还有如果该字段原来是主关键字那么NULL要改成:NOT NULL
      

  2.   

    我试了一下,命令执行通过,但字段的indentity属性还在,两位试过没有
      

  3.   

    wwl007(疑难杂症) ,有办法间接去嘛,不要跟我说建立临时表!
      

  4.   

    你们说的不可以!
    如果不信你就是试验一下
    CREATE TABLE doc_exc ( column_a INT not null identity) 
    alter table doc_exd
        alter column column_a int not  null
      

  5.   

    老兄你可以换一种方法的,我这有一种,你不妨一试:
    SET IDENTITY_INSERT test ON
              INSERT 
            INTO test(col1, col2, id111)
    VALUES (3, 'e', 2)
    其中id111为IDENTITY
    我想这样也可以满足你的要求吧
      

  6.   

    如果你是想查数据
    我的方法是设置
    set identity_insert doc_exd
    go
    insert into doc_exd(column_a)
    values(1)
    比较完整的的例子
    -- Create products table.
    CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
    GO
    -- Inserting values into products table.
    INSERT INTO products (product) VALUES ('screwdriver')
    INSERT INTO products (product) VALUES ('hammer')
    INSERT INTO products (product) VALUES ('saw')
    INSERT INTO products (product) VALUES ('shovel')
    GO-- Create a gap in the identity values.
    DELETE products 
    WHERE product = 'saw'
    GOSELECT * 
    FROM products
    GO-- Attempt to insert an explicit ID value of 3;
    -- should return a warning.
    INSERT INTO products (id, product) VALUES(3, 'garden shovel')
    GO
    -- SET IDENTITY_INSERT to ON.
    SET IDENTITY_INSERT products ON
    GO-- Attempt to insert an explicit ID value of 3
    INSERT INTO products (id, product) VALUES(3, 'garden shovel').
    GOSELECT * 
    FROM products
    GO
    -- Drop products table.
    DROP TABLE products
    GO
      

  7.   

    set identity_insert doc_exd,
    这个方法我以前已试过,理论上应该行得通,但实际上可能会有操作上的问题,
    我就想不通,为什么在Enterprise Manager,点击一下就可解决的问题,而用sql语句就没办法设置,是微软在偷懒呢,还是我们不懂!!!谢谢楼上的每一位朋友,我觉得这个问题大家可以再想想,我也在努力的查资料
      

  8.   

    微软的Enterprise Manager实际是这么做的:
    对一个只有字段(i int,s char)的表,
    增加设置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_000
    (
    i int NOT NULL IDENTITY (1, 1),
    s char(10) NULL
    )  ON [PRIMARY]
    GO
    SET IDENTITY_INSERT dbo.Tmp_000 ON
    GO
    IF EXISTS(SELECT * FROM dbo.[000])
     EXEC('INSERT INTO dbo.Tmp_000 (i, s)
    SELECT i, s FROM dbo.[000] TABLOCKX')
    GO
    SET IDENTITY_INSERT dbo.Tmp_000 OFF
    GO
    DROP TABLE dbo.[000]
    GO
    EXECUTE sp_rename N'dbo.Tmp_000', N'000', 'OBJECT'
    GO
    COMMIT
    取消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_000
    (
    i int NOT NULL,
    s char(10) NULL
    )  ON [PRIMARY]
    GO
    IF EXISTS(SELECT * FROM dbo.[000])
     EXEC('INSERT INTO dbo.Tmp_000 (i, s)
    SELECT i, s FROM dbo.[000] TABLOCKX')
    GO
    DROP TABLE dbo.[000]
    GO
    EXECUTE sp_rename N'dbo.Tmp_000', N'000', 'OBJECT'
    GO
    COMMIT
    如果表中的字段有默认值还更麻烦,所以微软并没有偷懒的。其实你看看Enterprise Manager生成的脚本就知道了。
      

  9.   

    忘了说明一下。我是随便建了个名字为000的表测试了一下。上面的脚本都是Enterprise Manager自动生成的。
      

  10.   

    a_lan(阿懒) 说的好像正确,
       
        但一个问题是 微软有没有做一个sql扩展,用一句sql语句就可以去掉indentity属性,
        还有就是Enterprise Manager 中的脚本怎么看到的,我业余了。
        我在想如果微软偷懒没做,是不是可以写一个通用的存储过程,可以修改任何表的identity  属性
      

  11.   

    用Enterprise Manager 改identity 属性的时候,工具条上第3个按钮会变得可使用了。点一下就会弹出它的脚本。做保存操作的过程其实就是在执行脚本,所以如果你不保存你刚才的操作其实数据库什么都没变,只是生成了脚本而已。
      

  12.   

    尽管a_lan(阿懒) 还没有完全解决我的问题,还是给你20分吧
    毕竟我还是学到了不少
    wwl007(疑难杂症) 也出了不少力,剩下的5分就给你吧