Проблема ограничения ALTER TABLE - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь выполнить следующую инструкцию SQL:

IF OBJECT_ID('MyTable') IS NOT NULL
    DROP TABLE MyTable

SELECT
    a.UserId
INTO
    MyTable
FROM
    UsersTable a
WHERE
    a.UserId='12359670-1DC9-4A0A-8AE5-29B664C1A57E'


ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL
ALTER TABLE MyTable ADD PRIMARY KEY(UserId) 

Однако я получаю следующую ошибку: Невозможно определить ограничение PRIMARY KEY для столбца с нулевым значением в таблице «MyTable».

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Предполагается, что SQL Server основан на UNIQUEIDENTIFIER

Поместите GO между (или соответствующим разделителем пакетов, если не SQL Server)

....
ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL
GO
ALTER TABLE MyTable ADD PRIMARY KEY(UserId)

Во время пакетной компиляции столбец обнуляется. Так что разбейте партии.

SQL не является построчным процедурным языком

Вам придется сделать это в хранимой процедуре

ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL
EXEC('ALTER TABLE MyTable ADD PRIMARY KEY(UserId)')
0 голосов
/ 10 августа 2011

Вам не нужен динамический SQL. Сначала создайте таблицу и ключ.

CREATE TABLE MyTable (UserId UNIQUEIDENTIFIER NOT NULL PRIMARY KEY);

INSERT INTO MyTable (UserId)
SELECT UserId
FROM UsersTable
WHERE UserId='12359670-1DC9-4A0A-8AE5-29B664C1A57E';
0 голосов
/ 09 августа 2011

Нашел решение. Я использую следующее утверждение:

EXEC sp_ExecuteSQL N'ALTER TABLE MyTable ALTER COLUMN UserId UNIQUEIDENTIFIER NOT NULL'
EXEC sp_ExecuteSQL N'ALTER TABLE MyTable ADD PRIMARY KEY(UserId)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...