SQL2K8の別のデータベースで定義されているデータ型(テーブル)を使用する方法は?
-
03-10-2019 - |
質問
データベースで定義されたテーブルタイプがあります。ストアドプロシージャのテーブル値パラメーターとして使用されます。この手順を別のデータベースから呼び出したいと思います。パラメーターを渡すには、この定義されたタイプを参照する必要があります。
しかし、私がするとき DECLARE @table dbOtherDatabase.dbo.TypeName
、それは私にそれを教えてくれます The type name 'dbOtherDatabase.dbo.TypeName' contains more than the maximum number of prefixes. The maximum is 1.
このテーブルタイプを参照するにはどうすればよいですか?
他のヒント
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
所属していません StackOverflow