Это вычисляемый столбец, он не занимает пробел (если не указано как PERSISTED )
Поэтому удалите и добавьте его снова с новым вычислением после добавления «IsFlag4».
Пример использования временной таблицы:
IF OBJECT_ID('tempdb..#TableName', 'U') IS NOT NULL DROP TABLE #TableName;
CREATE TABLE #TableName
(
[ID] [INT] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[IsFlag1] [BIT] NOT NULL DEFAULT 0,
[IsFlag2] [BIT] NOT NULL DEFAULT 0,
[IsFlag3] [BIT] NOT NULL DEFAULT 0,
[IsFlag] AS (CASE WHEN [IsFlag1] = 1 OR [IsFlag2] = 1 OR [IsFlag3] = 1 THEN 1 ELSE 0 END)
);
CREATE INDEX idx_TableName_IsFlag ON #TableName ([IsFlag]);
insert into #TableName (IsFlag1, IsFlag2, IsFlag3) values (0,0,0),(0,0,1);
-- Add [IsFlag4]
ALTER TABLE #TableName ADD [IsFlag4] [BIT] NOT NULL DEFAULT 0;
-- Drop and Add [IsFlag]
-- Drop index first, and add it again after
BEGIN
DROP INDEX idx_TableName_IsFlag ON #TableName;
ALTER TABLE #TableName DROP COLUMN [IsFlag];
ALTER TABLE #TableName ADD [IsFlag] AS ([IsFlag1] | [IsFlag2] | [IsFlag3] | [IsFlag4]);
CREATE INDEX idx_TableName_IsFlag ON #TableName ([IsFlag]);
END;
insert into #TableName (IsFlag1, IsFlag2, IsFlag3, IsFlag4) values (0,0,0,1);
select * from #TableName;
Возвращает:
ID IsFlag1 IsFlag2 IsFlag3 IsFlag4 IsFlag
1 0 0 0 0 0
2 0 0 1 0 1
3 0 0 0 1 1