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

В SQL Server 2016 Express я изначально создал таблицу с первичным ключом, который использовал тип данных int. Теперь, углубившись в проект, я понял, что мне нужно, чтобы этот столбец был строковым типом данных, но когда я попробую это:

alter table ExpAwbs
drop constraint PK_ExpAwbs;

alter table ExpAwbs
alter column idExpAwbs varchar(12);

alter table ExpAwbs
add constraint PK_ExpAwbs primary key (idExpAwbs);

Я понял

Msg 4902, Level 16, State 1, Line 1
Cannot find the object "ExpAwbs" because it does not exist or you do not have permissions.

Можно ли сделать то, что я пытаюсь сделать на временной таблице, или мне нужно переделать таблицу?

2 ответа

Решение

Попробуй это:

Use YourDatabaseName
Go

alter table ExpAwbs
drop constraint PK_ExpAwbs;

alter table ExpAwbs
alter column idExpAwbs varchar(12);

alter table ExpAwbs
add constraint PK_ExpAwbs primary key (idExpAwbs);

Если это не работает, это означает, что у пользователя нет прав, поэтому вы должны сменить пользователя или Grant разрешение для этого пользователя.

Как упомянул @wei_dba, это, скорее всего, проблема с разрешениями. Чтобы доказать это, я воссоздал вашу таблицу, добавил к ней некоторые данные и попробовал - все заработало. Если вы не можете сделать это, очевидно, что проблема лежит в области разрешений; вам может потребоваться, чтобы кто-то выполнил этот запрос для вас.
При рассмотрении вашего запроса я вижу еще одну проблему с быстрым исправлением. Вы можете заменить следующее:

alter table ExpAwbs  
alter column idExpAwbs varchar(12);

с

alter table ExpAwbs  
alter column idExpAwbs varchar(12) not null;

Причиной является то, что вам нужно убедиться, что PK не имеет значения NULL, что вы не включили в свой запрос.

Другие вопросы по тегам