【发布时间】:2017-06-08 20:13:40
【问题描述】:
在 DatabaseA 上,我有用户定义的数据类型,用作存储过程中的输入参数。在另一个数据库 (DatabaseB) 上,我正在创建此过程的同义词,并在那里创建相同的数据类型。
当我调用 sysnonym 时,我收到一个错误“操作数类型冲突:Ids 与 Ids 不兼容”
有什么建议可以解决这个问题吗?
use DatabaseA
go
CREATE TYPE [dbo].[Ids] AS TABLE(
[Id] [sql_variant] NULL
)
GO
create procedure dbo.proc1 @Ids [Ids] readonly
as
begin
select *
from @Ids;
end
declare @Ids dbo.Ids;
insert into @Ids values (1),(2)
exec dbo.proc1
@Ids = @Ids
use DatabaseB
CREATE TYPE [dbo].[Ids] AS TABLE(
[Id] [sql_variant] NULL
)
go
CREATE SYNONYM [Admiral_CentralSystem01].[dbo_proc1] FOR [Admiral_CentralSystem01].[dbo].[proc1]
GO
declare @Ids dbo.Ids;
insert into @Ids values (1),(2)
exec [Admiral_CentralSystem01].[dbo_proc1]
@Ids = @Ids
【问题讨论】:
-
你到底需要做什么?
-
B.dbo.Ids不是A.dbo.Ids,即使它们恰好在结构上相同。您也不能为该类型创建同义词(好吧,您可以,但它不起作用)。您根本无法在另一个使用 TVP 的数据库中调用存储过程,因为您无法声明适当类型的参数。几乎可以肯定有替代方法可以实现您想要的,这取决于它是什么。
标签: sql-server