2009-04-30 3 views
1

Ich möchte über mehrere Datenbanken in SQL Server abfragen, also dachte ich, ich könnte eine Variable namens @DBNAME erstellen und sie an eine Abfrage übergeben wie folgt (aber es tut nicht arbeite nicht).Übergeben Sie eine Variable an den vollständig qualifizierten Namen als Datenbank in einer SQL-Abfrage

Dies wird innerhalb einer Schleife sein, wo DBNAME als Zählung auf Dbid durchlaufen wird. Meine Anzahl funktioniert und es @DBNAME als alle Produktionsdatenbanken ausgibt .. aber ich kann es nicht zu Abfrage über mehrere bekommen Datenbanken!

IF EXISTS (SELECT 1 FROM @

WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'Dataarea' DBNAME.INFORMATION_SCHEMA.TABLES) SELECT 'GETIN' AS ELSE res SELECT 'aaargh' AS res - -SELECT * Aus DataArea AS res ELSE SELECT NULL AS res;

Antwort

6

Sie können es mit dynamischem SQL tun wie diese

declare @tablename as sysname, @dbname as sysname 
select 
@dbname = 'master', 
@tablename = 'dbo.spt_fallback_db' 
declare @script nvarchar(4000) 
select @script = 'select top 10 * from ' + @dbname + '.' + @tablename 
exec sp_executesql @script 

Substitute Ihre Datenbank- und Tabellennamen als angemessen. Habe gerade einen Formularmaster zu Testzwecken benutzt.

+0

Danke für die Hilfe. Ich habe Folgendes als meine @ script-Variable deklariert: Wählen Sie @script = "SELECT 1 FROM '+ @DBNAME +'." + @tablename + 'WHERE TABLE_TYPE =' BASE TABLE‘AND TABLE_NAME = 'Dataarea'“ Ich denke, es ist mit dieser in Ordnung, aber wenn die folgenden hinzufügen, es nicht wie die exec IF exec sp_executesql @script VORHANDEN es sagt Msg 156, Ebene 15, Status 1, Zeile 20 Falsche Syntax in der Nähe des Schlüsselwortes 'exec'. –

+0

Anstatt exec ... wählen Sie @script und Sie werden das endgültige Skript sehen, dass SQL versuchen und – u07ch

+0

verarbeiten wird Es ist nicht: Ungültiger Spaltenname 'SELECT 1 FROM' + @DBNAME + '.' + @tabellenname + 'WHERE TABLE_TYPE =' BASE TABLE 'und TABLE_NAME =' DataArea ''. –

Verwandte Themen