Vic*_*loy 17 sql sql-server stored-procedures
我有两个不同的数据库模式中定义的相同表类型.当我尝试从一个模式调用SP到另一个模式作为参数传递类型时,我收到以下错误:
"操作数类型冲突myCustomType与myCustomType不兼容"
我有以下代码:
CREATE TYPE myCustomType AS TABLE
(
somevalue INT,
somevalue2 INT
);
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
USE db1
GO
DECLARE @myVar myCustomType
INSERT into @myVar(1,2)
EXEC PROC1 @myVar
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
Ric*_*iwi 13
您遇到了用户定义的表类型的一个限制.
请参阅此Microsoft Connect项目,关闭为"按设计".
给出的理由是
在数据库之间传递表类型参数是不可能的,因为你不能使用类似的代码
create proc PROC2(
@myVar db1.dbo.myCustomType READONLY
)
Run Code Online (Sandbox Code Playgroud)
错误是:
类型名称"db1.dbo.myCustomType"包含的前缀数量超过最大数量.最大值为1.
仅仅因为你将它们命名为相同并且在DB1和DB2中给它们相同的定义并不使它们成为相同的类型 - 它们保持不兼容,就像下面的单个数据库上也失败一样:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23137 次 |
| 最近记录: |