Sql server 调用输入参数为用户定义表类型的过程的同义词

Sql server 调用输入参数为用户定义表类型的过程的同义词,sql-server,Sql Server,在数据库上,我有一个用户定义的数据类型,在存储过程中用作输入参数。在另一个数据库(DatabaseB)上,我创建了这个过程的同义词,并且在那个里创建了相同的数据类型 调用sysnonym时,我收到一个错误“操作数类型冲突:Ids与Ids不兼容” 有没有解决这个问题的建议 use DatabaseA go CREATE TYPE [dbo].[Ids] AS TABLE( [Id] [sql_variant] NULL ) GO create procedure dbo.proc1 @

在数据库上,我有一个用户定义的数据类型,在存储过程中用作输入参数。在另一个数据库(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 

不能在另一个数据库中将表变量作为参数传递。
带有XPath的XML变量可以解决您的问题

您不能将表变量作为参数传递到另一个数据库中。
带有XPath的XML变量可以解决您的问题

基本上,表变量是数据库范围的

要在Microsoft SQL Server中使用用户定义类型(UDT),请 我必须注册。注册UDT涉及注册程序集 并在数据库中创建要在其中使用它的类型。 UDT的作用域为单个数据库,不能在多个数据库中使用 数据库,除非向注册了相同的程序集和UDT 每个数据库。注册UDT程序集后,类型 创建时,可以在Transact-SQL和客户端代码中使用UDT。对于 有关详细信息,请参见CLR用户定义类型


基本上,变量表是数据库范围的

要在Microsoft SQL Server中使用用户定义类型(UDT),请 我必须注册。注册UDT涉及注册程序集 并在数据库中创建要在其中使用它的类型。 UDT的作用域为单个数据库,不能在多个数据库中使用 数据库,除非向注册了相同的程序集和UDT 每个数据库。注册UDT程序集后,类型 创建时,可以在Transact-SQL和客户端代码中使用UDT。对于 有关详细信息,请参见CLR用户定义类型


你到底需要做什么?看看这个
B.dbo.Ids
不是
A.dbo.Ids
,即使它们恰好在结构上相同。您也不能为该类型创建同义词(当然,您可以,但它不起作用)。您不能在另一个使用TVP的数据库中调用存储过程,因为您不能声明适当类型的参数。几乎可以肯定的是,根据你想要的是什么,有其他的方法来实现你想要的。你到底需要做什么?看看这个
B.dbo.Ids
不是
A.dbo.Ids
,即使它们恰好在结构上相同。您也不能为该类型创建同义词(当然,您可以,但它不起作用)。您不能在另一个使用TVP的数据库中调用存储过程,因为您不能声明适当类型的参数。几乎可以肯定的是,根据你想要的是什么,有其他的方法来实现你想要的。