2009-04-30 4 views
1

Je souhaite interroger plusieurs bases de données dans SQL Server. J'ai donc pensé que je pouvais créer une variable appelée @DBNAME et la transmettre à une requête de la manière suivante (mais travail pas).Transmettre une variable au nom complet en tant que base de données dans une requête SQL

Cela se fera à l'intérieur d'une boucle où DBNAME est utilisé comme compte sur dbid .. mon compte fonctionne et il imprime @DBNAME comme toutes les bases de données de production .. mais je ne peux pas l'obtenir sur plusieurs requêtes bases de données!

IF EXISTS (SELECT 1 de @ DBNAME.INFORMATION_SCHEMA.TABLES

OU TABLE_TYPE = 'BASE TABLE' ET TABLE_NAME = 'DataArea') SELECT 'GETIN' AS res AUTRE SELECT 'Aaargh' AS res - -SELECT * A partir de DataArea AS res ELSE SELECT NULL AS res;

Répondre

6

Vous pouvez le faire avec sql dynamique comme celui-ci

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 

Remplacez vos noms de base de données et de table, selon le cas. Juste utilisé un formulaire maître à des fins de test.

+0

Merci pour l'aide. J'ai déclaré ce qui suit comme ma variable @script: select @script = "SELECT 1 FROM '+ @DBNAME +'. ' + @tablename + 'OÙ TABLE_TYPE =' BASE TABLE » ET TABLE_NAME = 'DataArea' » je pense qu'il est très bien avec cela, mais quand ajouter ce qui suit, il n'aime pas l'exécutif IF EXISTS exec sp_executesql @script dit Msg 156, niveau 15, état 1, ligne 20 Syntaxe incorrecte près du mot-clé 'exec'. –

+0

Au lieu de exec ..., sélectionnez @script et vous verrez le script final que SQL va essayer et traiter – u07ch

+0

Il ne l'a pas: Nom de colonne non valide 'SELECT 1 FROM' + @DBNAME + '.' + @tablename + 'WHERE TABLE_TYPE =' BASE TABLE 'et TABLE_NAME =' DataArea ''. –

Questions connexes