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

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

столкновение типов операндов: 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 ответов


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

редактировать

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

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


если вы получаете доступ к этому через представление, то попробовать sp_recompile или освежающий вид.

sp_recompile:

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

Аргументы

[ @objname= ] 'object'

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

Возвращаемые Значения Кода

0 (успех) или ненулевое число (отказ)

Примечания

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

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