2016-12-26 12 views
1

У меня возникли проблемы с запуском нескольких команд ALTER в одном запросе.SQL - Запуск нескольких запросов ALTER

Всякий раз, когда им пытаются запустить следующий код:

ALTER TABLE Book$ 
ALTER COLUMN PID INT NOT NULL 

ALTER TABLE Book$ 
ADD CONSTRAINT pk_book PRIMARY KEY(PID) 

Я получаю сообщение об ошибке:

Cannot define PRIMARY KEY constraint on nullable column in table 'Book$'. 

Но если я запускать запросы по отдельности, первый:

ALTER TABLE Book$ 
ALTER COLUMN PID INT NOT NULL 

И затем:

ALTER TABLE Book$ 
ADD CONSTRAINT pk_book PRIMARY KEY(PID) 

Все, кажется, работает нормально. Что я делаю неправильно? Благодаря!

+0

Я удалил несовместимые теги базы данных. Пожалуйста, пометьте базу данных, которую вы действительно используете. –

+0

в sql сервере, я могу запускать оба запроса вместе в пакете – TheGameiswar

ответ

2

Добавить GO (пакетный сепаратор) между ними, чтобы решить эту проблему

ALTER TABLE Book$ 
ALTER COLUMN PID INT NOT NULL 

GO 

ALTER TABLE Book$ 
ADD CONSTRAINT pk_book PRIMARY KEY(PID) 

Без GO весь сценарий будет рассматриваться как единый сценарий

0

Я не уверен, какую базу данных вы используете. Однако, чтобы объяснить, что происходит, вам нужно понять две фазы обработки операторов: компиляция и выполнение.

Фаза компиляции считывает инструкцию и определяет план выполнения. Затем выполняется этап выполнения, который выполняет план. Ничто из таблицы не меняется только потому, что компиляция выполняется.

Что происходит, так это то, что два оператора скомпилированы и затем выполнены. Когда вторая скомпилирована, ничего не изменилось (ну, за исключением того факта, что план выполнения первого оператора хранится где-то). Следовательно, вы получаете компиляцию.

Когда вы запускаете два отдельно, происходят изменения с первого, а затем второе не генерирует ошибку.

 Смежные вопросы

  • Нет связанных вопросов^_^