簡體   English   中英

操作數類型沖突:uniqueidentifier與int不兼容

[英]Operand type clash: uniqueidentifier is incompatible with 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

在我看來,至少這些表之一已將UserID定義為uniqueidentifier ,而不是int 您是否檢查了每個表中的數據? 每個表中的SELECT TOP 1 UserID FROM產生什么? 一個int還是GUID

編輯

我認為您已經基於包含名為UserID的列的所有表構建了一個過程。 我認為您不應該在腳本中包含aspnet_Membership表,因為它實際上不是“您的”表之一。

如果您打算圍繞aspnet_Membership數據庫設計表,那么當該表明確為UserID列使用uniqueidentifier時,為什么其余的aspnet_Membership int呢?

如果要通過視圖訪問此視圖,請嘗試sp_recompile或刷新視圖。

sp_recompile

使存儲過程,觸發器和用戶定義的函數在下次運行時重新編譯。 它是通過從過程高速緩存中刪除現有計划來強制下一次運行該過程或觸發器時創建一個新計划的。 在SQL Server Profiler集合中,記錄了事件SP:CacheInsert而不是事件SP:Recompile。

爭論

[ @objname= ] 'object'

當前數據庫中存儲過程,觸發器,表,視圖或用戶定義函數的合格或不合格名稱。 對象是nvarchar(776),沒有默認值。 如果object是存儲過程,觸發器或用戶定義函數的名稱,則存儲過程,觸發器或函數將在下次運行時重新編譯。 如果object是表或視圖的名稱,則所有引用該表或視圖的存儲過程,觸發器或用戶定義的函數都將在下次運行時重新編譯。

返回碼值

0(成功)或非零數字(失敗)

備注

sp_recompile僅在當前數據庫中查找對象。

存儲過程或觸發器使用的查詢以及用戶定義的函數僅在編譯時才進行優化。 當對數據庫進行影響統計的索引或其他更改時,編譯的存儲過程,觸發器和用戶定義的函數可能會降低效率。 通過重新編譯作用在表上的存儲過程和觸發器,可以重新優化查詢。

原因是數據與數據類型不匹配。 我遇到了我忘記使字段匹配的相同問題。 盡管我的情況與您的情況不同,但它顯示了類似的錯誤消息。

情況是我復制了一個表,但是偶然地我拼錯了一個字段,因此在創建數據庫后使用ALTER對其進行了ALTER 並且兩個表中的字段順序都不相同。 因此,當我使用INSERT INTO TableName SELECT * FROM TableName ,結果顯示類似的錯誤: Operand type clash: datetime is incompatible with uniqueidentifier

這是一個類似的示例:

use example
go
create table Test1 (
    id int primary key,
    item uniqueidentifier,
    inserted_at datetime
    )
go
create table Test2 (
    id int primary key,
    inserted_at datetime
    )
go
alter table Test2 add item uniqueidentifier;
go

--insert into Test1 (id, item, inserted_at) values (1, newid(), getdate()), (2, newid(), getdate());


insert into Test2 select * from Test1;

select * from Test1;
select * from Test2;


錯誤消息是:

Msg 206, Level 16, State 2, Line 24
Operand type clash: uniqueidentifier is incompatible with datetime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM