回答

收藏

sql server冲突操作数表类型

技术问答 技术问答 189 人阅读 | 0 人回复 | 2023-09-14

我在两种不同的数据库模式中定义了相同的表类型。当我试图使用一种类型时SP作为参数从一个模式调用到另一个模式时,出现以下错误:) U) d+ v1 `  l( |; K+ j
操作符类型冲突myCustomType与myCustomType不兼容”
% T$ V: `6 N! p3 ^; X# ~) S! X- E
我有以下代码:* X: X/ G; H$ ]% ?
类型定义CREATE TYPE myCustomType AS TABLE(  somevalue INT,  somevalue2 INT);定义存储过程USE DB1GOCREATE PROC1(   @myVar myCustomType READONLY)ASBEGIN  EXEC db2.dbo.PROC2 @myVarENDGOUSE DB2GOCREATE PROC2(   @myVar myCustomType READONLY)ASBEGIN  --do something with myVar  END执行USE db1GODECLARE @myVar myCustomTypeINSERT into @myVar(1,2)EXEC PROC1 @myVar如何解决这个问题?
7 ^% @) @& T! `                                                               
8 o9 @% k- D9 W. {1 V% {6 l    解决方案:                                                                + L& [0 J4 K, g3 c
                                                                您遇到了用户定义表类型的局限性之一。
. C4 N$ v& z3 E/ {) Y; \4 C' V请参阅此Microsoft6 Z% Q% J  p# s4 Q" {8 Z
Connect以按设计关闭项目。4 N$ J& K- S/ l* k7 k* y
给出的理由是3 h4 L- ^* }4 T4 e- Q" m0 o7 @9 p9 I( b
[ol]proc参数的[table]类型必须与传入参数类型完全相同, V8 v' D4 t$ r; l7 Y+ ]1 \8 [
验证规则是否不应用(1)变得越来越贵[/ol]不可能在数据库之间传输表类型参数,因为你不能使用类似的参数% C7 U+ P9 a0 @  \# h/ }% N, s) S
create proc PROC2(  @myVar db1.dbo.myCustomType READONLY)错误是:* O+ M& t1 C# F& t# }. V
类型名称db1.dbo.myCustomType前缀的数量超过了最大数量。最大值为1。  Y- G/ }; G4 A! U
仅仅因为你在DB1和DB2.它们命名相同,并给它们提供相同的定义,不能使它们有相同的类型-4 C  F+ @( {4 O% m
它们仍然不兼容,就像下面的内容一样,它们是单一的db上也失败:
3 Q# C6 O" Q" _! UCREATE TYPE myCustomTypeX AS TABLE(somevalue INT,somevalue2 INT);GOcreate proc procX@in myCustomTypeX readonlyASselect * from @in myCustomTypeX;GOdeclare @myCustomTypeX TABLE(somevalue INT,somevalue2 INT);exec procX @myCustomTypeX--Msg 206,Level 16,State 2,Procedure procX,Line 0Operand type clash: table is incompatible with myCustomTypeX
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则