SQL изменяет столбец в таблице с бита на Int

#sql-server #bit #alter-table

#sql-сервер #бит #alter-таблица

Вопрос:

Итак, что я хочу сделать, это изменить таблицу и изменить столбец с БИТА на INT. Хотя в настоящее время в столбце есть значения null, я хотел бы изменить их на -1 и не допускать null. Поскольку БИТ содержит только 0 и 1, как бы мне изменить столбец на INT и установить нулевые значения равными -1

Я думал о чем-то вроде

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

Комментарии:

1. Какую СУБД вы используете?

2. sql management studio, я собираюсь написать это как скрипт вместо использования генератора, потому что мне нужно сохранить значения текущего столбца, не теряя их

3. Есть ли особая причина, по которой вы не делаете это шаг за шагом — изменение типа, обновление данных, добавление ограничения not null?

4. Итак, измените тип, затем измените значения, которые равны null на -1, затем добавьте ограничение not null, и, наконец, мне нужно будет установить значение по умолчанию на -1? @MartinK.

5. конечно, я думаю, вы сделаете это только один раз

Ответ №1:

Надеюсь, следующий фрагмент кода поможет вам.

 --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
  

Комментарии:

1. Спасибо за помощь, этот пример отлично сработал для меня. Я ценю помощь

Ответ №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
  

Комментарии:

1. Спасибо @Rahul тоже за помощь!

Ответ №3:

Я думаю, вам придется создать новый столбец и обновить его значения в трех отдельных операторах обновления, затем удалить старый столбец и переименовать новый