2016-04-04 14 views
1

SQL Server:ストアドプロシージャのパラメータとしてデータベース名を使用する方法はありますか

無効な列名のT

任意の助けをいただければ幸いです

のように報告して

SET DBname = "sample" 
SELECT * 
FROM Table1 
INNER JOIN DBname.Table2 T On Table1.key = T.Key 

そのように同じdomainで2つの異なるdbのテーブルに参加し、私が行うことができますどのように

+3

オブジェクト識別子を変数に格納して問合せで使用することはできません。代わりに動的SQLを使用する必要があります。同じサーバ上のデータベースの場合、 'select * from databasename.schemaname.tablename'は異なるサーバ上のデータベースに対して' sp_addlinkedserver'と 'select * from servername.databasename.schemaname.tablename'を使用します。 –

答えて

3

動的SQLを使用する必要があります:

@DBname = 'sample'; 
declare @sql nvarchar(max); 

set @sql = ' 
SELECT * 
FROM Table1 INNER JOIN 
    @DBname.table2 
    On Table1.key = Table2.Key'; 

set @sql = replace(@sql, '@DBname', @DBname); 

exec sp_executesql @sql; 

一般的なデータベース(特にSQL Server)では、パラメータでデータベース名、スキーマ名、テーブル名、または列名を表すことはできません。

+0

私は理解します。しかし、私は名前が異なるDBにあるIDだけを持っています。私は私のIDに名前をコピーするか、私が今やっていることをする必要があります –

関連する問題