簡體   English   中英

在 sql 中使用用戶定義的表類型時出錯 --> 操作數類型沖突:varchar 與“用戶定義的表類型”不兼容

[英]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.Idut.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.

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