sql server表类型冲突操作数
发布时间:2020-12-12 08:38:40 所属栏目:MsSql教程 来源:网络整理
导读:我有两种不同的数据库模式中定义的相同的表类型.当我尝试从一个模式调用SP到另一个模式传递类型作为参数时,我得到以下错误: “Operand type clash myCustomType is incompatible with myCustomType” 我有以下代码: 类型定义 CREATE TYPE myCustomType AS T
我有两种不同的数据库模式中定义的相同的表类型.当我尝试从一个模式调用SP到另一个模式传递类型作为参数时,我得到以下错误:
我有以下代码: 类型定义 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]类型必须完全是传入参数的类型 在数据库之间传递表类型参数是不可能的,因为您不能使用代码 create proc PROC2( @myVar db1.dbo.myCustomType READONLY ) 错误是:
只是因为你给它们命名相同,并且给它们在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读