SQL2K8の別のデータベースで定義されているデータ型(テーブル)を使用する方法は?

StackOverflow https://stackoverflow.com/questions/2876819

質問

データベースで定義されたテーブルタイプがあります。ストアドプロシージャのテーブル値パラメーターとして使用されます。この手順を別のデータベースから呼び出したいと思います。パラメーターを渡すには、この定義されたタイプを参照する必要があります。

しかし、私がするとき DECLARE @table dbOtherDatabase.dbo.TypeName 、それは私にそれを教えてくれます The type name 'dbOtherDatabase.dbo.TypeName' contains more than the maximum number of prefixes. The maximum is 1.

このテーブルタイプを参照するにはどうすればよいですか?

役に立ちましたか?

解決

Cross-Databaseユーザー定義型タイプは、CLRベースのタイプでのみ機能するようです。見る このフォーラムMSDN (プラスコメント)。

他のヒント

SP_EXECUTESQLを使用してみることができます。

DECLARE @mylist integer_list_tbltype,
        @sql nvarchar(MAX)
SELECT  @sql = N'SELECT p.ProductID, p.ProductName
                 FROM    Northwind..Products p
                 WHERE   p.ProductID IN (SELECT n FROM @prodids)'
INSERT @mylist VALUES(9),(12),(27),(37)
EXEC sp_executesql @sql, N'@prodids integer_list_tbltype READONLY', @mylist

それがうまくいかない場合は、リモートDBにラッパー手順を作成する必要があります。そこでは、CSV文字列を渡し、ラッパー手順がそれを分割し、テーブルを作成し(ローカルテーブルタイプを使用して)、実際の手順。見る この答え CVS文字列を分割する方法の説明については。

両方のデータベースのタイプを定義するだけではありませんか。

編集

見る これ 必要なことを行う方法に関する記事

このスレッドについては前に、しかし私は同じことをしようとしていて、同じ制限に悩まされていました。

@テーブルを宣言しないでください。#テーブルを使用して、データベースをテーブルタイプのある文字列に切り替えることができるexec文字列から呼び出すことができます。

例えば

use dbA
create type ThisTableRecord as table (id int, value varchar(max))

go

create procedure ThisTableSave
    @ThisTable ThisTableRecord readonly
AS
begin
    select * from @thisTable
end

go

use dbB

go

create procedure ThatTableSave

as begin

   create table #thatTable (id int, value varchar(max))

   insert into #thatTable
   values   (1, 'killing')
        ,   (2, 'joke')
        ,   (3, 'the')
        ,   (4, 'damned')

   exec ('
use dbA
declare @thisTable thisTableRecord
insert into @thisTable select * from #thatTable
exec thisTableSave @thisTable
')

end

exec ThatTableSave
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top