Похоже, что ваш MODIFY TABLE
должен быть ALTER COLUMN
.
IDENTITY
может быть больно, поскольку вам не удастся добавить его как свойство в столбец. Таблицы с колонками IDENTITY
должны иметь их (создаваемые таким образом столбцы IDENTITY
), и впоследствии нелегко также избавиться от этого свойства.
Предполагая, что у вас есть таблица, которая более или менее так:
IF NOT EXISTS (SELECT 1
FROM sys.objects
WHERE name = 'items_lootdata'
AND type = 'U')
BEGIN
CREATE TABLE dbo.items_lootdata
(
RecordID INTEGER NOT NULL,
MoreData BIT
);
END;
GO
Если вы хотите RecordID быть IDENTITY
включен столбец, если таблица пуста, вы можете просто воссоздать объект:
IF NOT EXISTS (SELECT 1
FROM sys.objects
WHERE name = 'items_lootdata'
AND type = 'U')
BEGIN
CREATE TABLE dbo.items_lootdata
(
RecordID INTEGER IDENTITY(1, 1) NOT NULL,
MoreData BIT
);
END;
GO
Я предпочитаю, если возможно, использовать переключатель метаданных, поскольку он также сохранит любые данные, которые в настоящее время содержатся в вашей таблице. Это включает переименование, создание новой таблицы и самого коммутатора. Вероятно, вы также захотите установить первый параметр своего столбца IDENTITY
на то, что больше или равно текущему максимальному значению RecordID, так как я предполагаю, что вам захочется поместить первичный ключ в этот столбец впоследствии.
IF NOT EXISTS (SELECT 1
FROM sys.objects
WHERE name = 'items_lootdata'
AND type = 'U')
BEGIN
--DROP TABLE dbo.items_lootdata;
CREATE TABLE dbo.items_lootdata
(
RecordID INTEGER NOT NULL,
MoreData BIT
);
INSERT INTO dbo.items_lootdata(RecordID, MoreData)
VALUES(1, 1);
END;
GO
EXECUTE dbo.sp_rename @objname = 'dbo.items_lootdata', @newname = 'items_lootdata_old'
IF NOT EXISTS (SELECT 1
FROM sys.objects
WHERE name = 'items_lootdata'
AND type = 'U')
BEGIN
--DROP TABLE dbo.items_lootdata;
CREATE TABLE dbo.items_lootdata
(
RecordID INTEGER IDENTITY(1, 1) NOT NULL,
MoreData BIT
);
END;
GO
ALTER TABLE dbo.items_lootdata_old
SWITCH TO dbo.items_lootdata;
GO
DROP TABLE dbo.items_lootdata_old;
GO
INSERT INTO dbo.items_lootdata (MoreData)
VALUES (0);
GO
SELECT *
FROM dbo.items_lootdata;
Обратите внимание, что для ALTER ... SWITCH
работать, вы, возможно, придется изменить то, что вы на самом деле может синхронизации, прежде чем пытаться его. Ошибка SWITCH
, если структуры не идентичны друг другу (то есть: исходный столбец RecordID имеет значение NULL), поэтому эти вещи необходимо будет устранить.
Вы хотите добавить новый столбец или просто изменить существующий столбец? – Abhinav
Команда 'MODIFY' не существует в SQL Server. Чего вы пытаетесь достичь? Добавить новый столбец? Изменить существующий? Добавить личность? –
Вы можете ** (a) ** добавить новый столбец с 'ALTER TABLE ... ADD columnName ....' или ** (b) ** вы можете изменить определение столбца с помощью 'ALTER TABLE ... ALTER COLUMN columnName .... '- но ключевое слово MODIFY в SQL Server отсутствует, и вы не можете добавить спецификацию IDENTITY в существующий столбец. –