当前位置: 首页 > 面试题库 >

sql server表类型冲突操作数

锺博耘
2023-03-14
问题内容

我在两个不同的数据库模式中定义了相同的表类型。当我尝试将一个类型的SP作为参数从一个模式调用到另一个模式时,出现以下错误:

“操作符类型冲突myCustomType与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项目
,以“按设计”关闭。

给出的理由是

  1. proc参数的[table]类型必须与传入参数的类型完全相同
  2. 验证是否不应用规则(1)变得越来越昂贵

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

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

错误是:

类型名称“ db1.dbo.myCustomType”包含的前缀数量超过了最大数量。最大值为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


 类似资料:
  • 问题内容: 我的问题是每个插入中都有错误 操作数类型冲突:int与日期不兼容 如何解决这个问题? 也在这里 … 消息547,级别16,状态0,第1行INSERT语句与FOREIGN KEY约束“ FK__crew__emp_num__0F975522”发生冲突。数据库“ melisa”的表“ dbo.employee”的列“ emp_num”中发生了冲突。这张桌子上有错误 问题答案: 此表达式是一

  • fw1在这里使用jar中的logger.java http://anonsvn.jboss.org/repos/common/common-logging-spi/trunk/src/main/java/org/jboss/logging/ fw2在这里使用jar中的logger.java

  • 问题内容: 我们有一个以异常结尾的包,例如 直到eclipse 3.3为止,我们的代码库都没有问题,但是当我们转到eclipse 3.4时,它开始给出与此软件包相关的错误: 当我将包名称重构为abcexceptions时,没有任何问题。这是由于eclipse 3.4中的错误还是有一些设置可以纠正此行为? 问题答案: 我在eclipse中更改了编译选项之一,问题消失了。在工作空间属性下:Java编译

  • 我的项目结构:Spring Boot DB:MSSQLFF4j(FeatureStoreSpringJdbc) 创建了如下url所示的表架构https://github.com/ff4j/ff4j/blob/master/ff4j-core/src/main/resources/schema-ddl.sql 获取“操作数类型冲突datetime2与时间戳不兼容”访问“/api/ff4j”rest

  • 我的项目结构:Spring Boot+DB:MS SQL+FF4j(FeatureStoreSpringJdbc) 在org.springframework.jdbc.support.abstractfallbacksqlexceptiontranslator.translate(abstractfallbacksqlexceptiontranslator.java:89) 在org.spring

  • 我试图在中使用来创建一个新变量,在这个变量中,我将一些值设置为missing并同时重新编码其他值。 但是,如果尝试将值设置为,则会出现一个错误,说明我们无法创建变量,因为是逻辑的: mutate_impl(.data,dots)中出错: 计算错误:类型必须是double,不是逻辑。 在数据帧的非逻辑向量中,是否有方法使用此设置值?