[英]Error while using user-defined table type in sql --> Operand type clash: varchar is incompatible with "user defined table type"
我正在嘗試在存儲過程中使用用戶定義的表,但是在運行我的過程時出現錯誤
"Operand type clash: varchar is incompatible with ..."
我定義了一個用戶定義的表格,如下所示:
CREATE TYPE [myUserTable] AS TABLE(
[Id] [nvarchar](10) NOT NULL)
存儲過程:
Create PROCEDURE FETCHUSER
(@USERS [myUserTable] readonly,
@Firstname varchar(max))
select * from UserTable as ut, @USERS as mt where mt.Id = ut.Id
在執行時,我提供了輸入參數:
@USERS = 'Sample'
但得到錯誤
"Operand type clash: varchar is incompatible with ..."
請幫幫我。 任何建議,不勝感激!
您需要傳遞一個存在的參數值。 如果要從myUserTable
進行select
,則傳遞它而不是sample
。 此外,您需要傳遞varchar(max)
類型的FirstName
。 您需要確保您傳遞的任何內容都與此類型兼容。 最后,如果my.Id
和ut.Id
是不兼容的類型,那么您需要將其中一個類型轉換為另一個類型以進行比較。
您似乎將@USERS
變量聲明為varchar
而預期的存儲過程參數類型是myUserTable
。 傳遞一個表值參數值,需要聲明一個表類型的變量,在表變量中插入行,然后調用proc。
以下是使用現代 ISO SQL 連接語法基於您問題中的代碼的重構示例。 不確定在您的實際代碼中如何使用@FirstName
,但我將其保留在這里。
CREATE PROCEDURE FETCHUSER
@USERS [myUserTable] readonly
,@Firstname varchar(max)
AS
SELECT *
FROM UserTable AS ut
JOIN @USERS AS mt ON mt.Id = ut.Id;
GO
DECLARE @myUserTable [myUserTable];
INSERT INTO @myUserTable(ID) VALUES(N'Sample');
EXEC FETCHUSER @USERS = @myUserTable, @FirstName = '';
GO
我認為以下代碼可以幫助您
CREATE TYPE [dbo].[myUserTable] AS TABLE([Id] [nvarchar](10) NOT NULL);
CREATE PROCEDURE [dbo].FETCHUSER
@USERS [myUserTable] READONLY,
@Firstname VARCHAR(MAX)
AS
BEGIN
SELECT *
FROM UserTable AS ut
JOIN @USERS AS mt
ON mt.Id = ut.Id;
END
GO
DECLARE @users [myUserTable]
INSERT INTO @users
VALUES
(
'1'
) ,
(
'2'
)
EXEC FETCHUSER @users,
'yourFirstName'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.