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

Ich habe 2 strukturell identische Datenbanken, die auf demselben Server sitzen. Man speichert nur Informationen für 30 Tage, für eine schnelle Berichtverarbeitung, die anderen sparen jahrelange Informationen. Jede Abfrage wird ordnungsgemäß ausgeführt, wenn ich Current.dbo.table oder Archive.dbo.table habe, aber ich möchte einen Parameter festlegen, so dass wir innerhalb des gleichen Berichts zwischen Current und Archive wechseln können, sodass ein Benutzer aus dem Archiv ziehen kann Datenbank ohne Administratorzugriff, um die Datenquellenverbindungszeichenfolge zu wechseln. Ist das möglich? Ich bin sicher, der Syntaxfehler ist, weil die Verbindungszeichenfolge kein Nvarchar ist, aber ich kann nicht herausfinden, die richtige Art, diese Abfrage zu schreiben.T-SQL Verbindungszeichenfolge als Parameter deklarieren

+0

SQL Server oder MySQL? – scsimon

Antwort

0

Für SQL Server benötigen Sie Dynamic 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

Das hat den Trick gemacht! –

0

können Sie dies versuchen. Basierend auf Ihrem Parameterwert wählt die Person entweder alle Zeilen oder nichts aus.

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 
Verwandte Themen