2016-11-07 25 views
1
DECLARE @DBS nvarchar(32) 
SET @DBS = 'Current' --'Archive' 
SELECT TOP 100 * 
    FROM [@DBS].[dbo].[table] 

同じサーバーに2つの構造的に同一のデータベースがあります。 1つは、迅速なレポート処理のために30日間の情報を保存するだけで、もう1つは長年の情報を保存します。 Current.dbo.tableまたはArchive.dbo.tableがある場合、どちらのクエリも正常に実行されますが、ユーザーがアーカイブからプルできるように、同じレポート内でCurrentとArchiveを切り替えることができるようにパラメータを設定したい管理者アクセス権を持たずにデータソース接続文字列を切り替えることができます。これは可能ですか?私は、接続文字列がnvarcharではないため、構文エラーであると確信していますが、このクエリを書く正しい方法を理解できません。接続文字列をパラメータとして宣言する

+0

SQL ServerまたはMySQL? – scsimon

答えて

0

SQL Serverの場合、動的SQLが必要です。

DECLARE @DBS nvarchar(32) 
SET @DBS = 'Current' --'Archive' 
DECLARE @SQL VARCHAR(MAX) 
SET @SQL = ' 
SELECT TOP 100 * 
    FROM ' + @DBS + '.[dbo].[table]' 
EXEC(@SQL) 
+0

それはトリックでした! –

0

これを試すことができます。 パラメータ値に基づいて、個人はすべての行を返すか何も返しません。

SELECT TOP 100 * 
    FROM [DBS].[dbo].[table] -- Your active table schema 
where @yourParamenter= 0 
union 
SELECT TOP 100 * 
    FROM [archiveDBS].[dbo].[table] -- Your archive table schema 
where @yourParamenter= 1 
関連する問題