Столкновение с типом операнда: uniqueidentifier несовместим с int - PullRequest
17 голосов
/ 12 сентября 2011

Когда я пытаюсь создать хранимую процедуру ниже, я получаю следующую ошибку:

Столкновение с типом операнда: uniqueidentifier несовместим с int

Мне не ясно, что является причиной этой ошибки. UserID на самом деле является int во всех моих таблицах. Может кто-нибудь сказать мне, что я сделал не так?

create procedure dbo.DeleteUser(@UserID int)
as

    delete from [aspnet_Membership] where UserId = @UserID
    delete from [Subscription] where UserID = @UserID
    delete from [Address] where UserID = @UserID
    delete from [User] where UserID = @UserID

go

Ответы [ 2 ]

18 голосов
/ 12 сентября 2011

Похоже, что по крайней мере одна из этих таблиц определила UserID как uniqueidentifier, а не int. Вы проверили данные в каждой таблице? Что дает SELECT TOP 1 UserID FROM каждая таблица? int или GUID?

EDIT

Я думаю, что вы создали процедуру, основанную на всех таблицах, которые содержат столбец с именем UserID. Я думаю, что вы не должны были включать таблицу aspnet_Membership в ваш скрипт, так как на самом деле это не одна из ваших таблиц.

Если вы намеревались создать таблицы вокруг базы данных aspnet_Membership, то почему остальные столбцы int, когда в этой таблице явно используется uniqueidentifier для столбца UserID?

2 голосов
/ 19 октября 2015

Если вы получаете доступ к этому через представление, тогда попробуйте sp_recompile или обновите представления.

sp_recompile

Вызывает перекомпиляцию хранимых процедур, триггеров и пользовательских функций при следующем запуске. Это делается путем удаления существующего плана из кэша процедур, что заставляет создавать новый план при следующем запуске процедуры или триггера. В коллекции SQL Server Profiler регистрируется событие SP: CacheInsert вместо события SP: Recompile.

Аргументы

[ @objname= ] 'object'

Полное или неквалифицированное имя хранимой процедуры, триггера, таблицы, представления или пользовательской функции в текущей базе данных. объект nvarchar (776), без значения по умолчанию. Если объект - это имя хранимой процедуры, триггера или пользовательской функции, хранимая процедура, триггер или функция будут перекомпилированы при следующем запуске. Если объект является именем таблицы или представления, все хранимые процедуры, триггеры или пользовательские функции, которые ссылаются на таблицу или представление, будут перекомпилированы при следующем запуске.

Значения кода возврата

0 (успех) или ненулевое число (сбой)

Примечания

sp_recompile ищет объект только в текущей базе данных.

Запросы, используемые хранимыми процедурами, триггерами и пользовательскими функциями, оптимизируются только после их компиляции. Поскольку в базу данных вносятся индексы или другие изменения, влияющие на статистику, скомпилированные хранимые процедуры, триггеры и пользовательские функции могут потерять эффективность. Перекомпилировав хранимые процедуры и триггеры, которые действуют на таблицу, вы можете повторно оптимизировать запросы.

...