【问题标题】:SQL Alter Column in table From Bit to IntSQL 更改表中的列从位到整数
【发布时间】:2014-06-25 19:53:17
【问题描述】:

所以我要做的是更改表并将列从 BIT 更改为 INT。尽管当前列中有空值,但我想将其更改为 -1 并且不允许为空。由于 BIT 仅包含 0 和 1,我将如何将列更改为 INT 并将 Null 值设置为 -1

我在想一些类似的事情

ALTER TABLE TABLENAME
ALTER COLUMN COLUMNAME INT SET DEFAULT -1
WHEN NULL THEN CAST(-1 AS INT)

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • sql management studio,我将把它写成脚本而不是使用生成器,因为我需要保留当前列的值而不丢失它们
  • 不按部就班的做是不是有什么特殊的原因——改变类型、更新数据、添加非空约束?
  • 所以更改类型,然后将值为空的值更改为-1,然后添加非空约束,最后我需要将默认值设置为-1? @MartinK。
  • 当然,我猜你只会这样做一次

标签: sql-server bit alter-table


【解决方案1】:

希望下面的代码 sn-p 能帮到你。

--Created table for testing
CREATE TABLE Test(COl Bit)

--Insertint values
INSERT INTO Test VALUES(0)
INSERT INTO Test VALUES(NULL)
INSERT INTO Test VALUES(1)

--Change the column type
ALTER TABLE Test ALTER COLUMN COL INT

-- Update null values to -1
UPDATE Test SET COL = ISNULL(COL,-1) WHERE COL is NULL

-- Changing the column to not null
ALTER TABLE Test ALTER COLUMN COL int NOT NULL

【讨论】:

  • 感谢您的帮助,此示例对我来说效果很好。感谢您的帮助
【解决方案2】:

正确的语法是:

ALTER TABLE {TABLENAME} 
ALTER {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

如下图一步一步做

create table test2(id int not null identity primary key ,
 col bit);


ALTER TABLE test2
ALTER COLUMN col INT NULL --Alter to change the type to INT

alter table test2
add constraint dflt default -1 for col  --Alter to create a default value

【讨论】:

  • 也感谢@Rahul 的帮助!
【解决方案3】:

我认为您必须创建一个新列并在三个单独的更新语句中更新它的值,然后删除旧列并重命名新列

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 2012-09-09
    • 2015-11-19
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多