sql server表类型冲突操作数

前端之家收集整理的这篇文章主要介绍了sql server表类型冲突操作数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两种不同的数据库模式中定义的相同的表类型.当我尝试从一个模式调用SP到另一个模式传递类型作为参数时,我得到以下错误

“Operand type clash myCustomType is incompatible with myCustomType”

我有以下代码

类型定义

CREATE TYPE myCustomType AS TABLE
(
  somevalue INT,somevalue2 INT
);

存储过程定义

USE DB1
GO
CREATE PROC1( 
  @myVar myCustomType READONLY
)
AS
BEGIN
  EXEC db2.dbo.PROC2 @myVar
END

GO

USE DB2
GO
CREATE PROC2( 
  @myVar myCustomType READONLY
)
AS
BEGIN
  --do something with myVar  
END

执行

USE db1
GO
DECLARE @myVar myCustomType
INSERT into @myVar(1,2)
EXEC PROC1 @myVar

如何解决这个问题?

解决方法

您会发现用户定义的表类型的一个限制.

看到这个Microsoft Connect item,被关闭为“设计”.

推理是这样的

> proc参数的[table]类型必须完全是传入参数的类型
如果规则(1)未被应用,验证是越来越昂贵的

数据库之间传递表类型参数是不可能的,因为您不能使用代码

create proc PROC2( 
 @myVar db1.dbo.myCustomType READONLY
)

错误是:

The type name ‘db1.dbo.myCustomType’ contains more than the maximum number of prefixes. The maximum is 1.

只是因为你给它们命名相同,并且给它们在DB1和DB2中都有相同的定义,它们不会使它们是相同的类型 – 它们仍然是不兼容的,下面也是单个db上的失败:

CREATE TYPE myCustomTypeX AS TABLE
(
somevalue INT,somevalue2 INT
);
GO
create proc procX
@in myCustomTypeX readonly
AS
select * from @in myCustomTypeX;
GO
declare @myCustomTypeX TABLE
(
somevalue INT,somevalue2 INT
);
exec procX @myCustomTypeX

--
Msg 206,Level 16,State 2,Procedure procX,Line 0
Operand type clash: table is incompatible with myCustomTypeX

猜你在找的MsSQL相关文章