Столкновение типов операндов: 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
ищет объект только в текущей базе данных.
запросы, используемые хранимыми процедурами или триггерами, и пользовательские функции оптимизируются только тогда, когда они составленный. При внесении в базу данных индексов или других изменений, влияющих на статистику, скомпилированные хранимые процедуры, триггеры и пользовательские функции могут утратить эффективность. Путем перекомпиляции хранимых процедур и триггеров, действующих на таблицу, можно повторно активировать запросы.