繁体   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