データベースA上ストアドプロシージャの入力パラメータとして使用されるユーザー定義データ型があります。別のデータベース(DatabaseB)では、このプロシージャと同義語を作成していますが、そこに同じデータ型を作成しています。入力パラメータがユーザー定義のテーブル型であるプロシージャの同義語を呼び出す
私はエラーrecivingいsysnonym呼び出す「オペランドタイプ衝突を:IdsはIDを持つ互換性がありません」
この問題を解決する方法の任意の提案?
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
? – Krismorte
これを見てくださいhttps://stackoverflow.com/questions/9039455/should-i-use-sql-variant-data-type – Krismorte
'B.dbo.Ids'は' A.dbo.Ids'ではありません。構造的に同一であることが起こる。タイプの同義語を作成することはできません(まあ、できますが動作しません)。適切な型のパラメータを宣言することはできないため、TVPを使用する別のデータベースのストアドプロシージャを呼び出すことはできません。それが何であるかに応じて、あなたが望むものを達成するためのほぼ確実な代替アプローチがあります。 –