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