1
votes

SQL: lors de l'utilisation de INFORMATION_SCHEMA.TABLES Comment spécifier un nom de base de données et un nom de serveur?

Dans le code ci-dessous, je suis en mesure de spécifier le nom de la table et le schéma que je souhaite interroger avec le nom de la table et le schéma de la table. Comment spécifier le nom de la base de données et le nom du serveur que je souhaite interroger?

J'ai essayé DATABASE_NAME, DB_NAME et SERVER_NAME. Aucun d'entre eux ne fonctionne.

 SELECT COUNT(1) AS TABLECOUNT FROM INFORMATION_SCHEMA.TABLES WHERE 
 TABLE_SCHEMA = 'dbo' AND TABLE_NAME = '[TABLE_NAME]


1 commentaires

Nous pouvons également utiliser directement le nom du serveur et la base de données. Voir ma mise à jour de réponse. J'ai déjà vérifié cela.


3 Réponses :


2
votes

Vous devez utiliser TABLE_CATALOG pour passer le nom de la base de données. Dans SQL Server, cette colonne contient le nom de la base de données qui contient cette table comme indiqué ci-dessous.

SELECT * FROM [ServerName].[DatabaseName].INFORMATION_SCHEMA.TABLES where ---.

Vous pouvez également transmettre directement le nom du serveur et le nom de la base de données comme indiqué ci-dessous.

SELECT COUNT(1) AS TABLECOUNT FROM INFORMATION_SCHEMA.TABLES WHERE 
TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'CALCULATION_SCHEDULE'
AND TABLE_CATALOG = '<Your Database Name>'


3 commentaires

Merci, exactement ce que je cherchais. Qu'en est-il de spécifier un nom de serveur?


@Suraj Kumar, il convient de mentionner que cela ne fonctionnera que pour les tables présentes dans une base de données actuelle, une telle sélection ne vérifiera pas l'existence d'objets d'une autre base de données


@AlexanderVolok Nous pouvons également utiliser directement le nom du serveur et la base de données. Voir ma mise à jour de réponse. J'ai déjà vérifié cela.



2
votes

Il n'y a pas de table ou de vue qui énumère toutes les tables de toutes les bases de données, vous devez spécifier explicitement la base de données:

  1. Directement dans la requête

    WHERE TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'CALCULATION_SCHEDULE'   
    AND SERVERPROPERTY('ServerName') = 'YourServer' ;
    
  2. Via "UTILISER"

    USE [dbname]
    SELECT COUNT(1) AS TABLECOUNT
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'CALCULATION_SCHEDULE'   ;
    
  3. Dans votre chaîne de connexion


Concernant un nom de serveur, cela n'est possible que via des variables système comme @@ SERVERNAME ou SERVERPROPERTY ('ServerName'):

SELECT COUNT(1) AS TABLECOUNT
FROM [dbname].INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'CALCULATION_SCHEDULE'   ;


2 commentaires

Nous pouvons également utiliser directement le nom du serveur et la base de données. Voir ma mise à jour de réponse. J'ai déjà vérifié cela.


@SurajKumar, bien sûr, nom_catalogue peut être utilisé, mais il contient toujours un nom de la base de données dans laquelle il réside, il a donc une utilité limitée. La même chose peut être obtenue avec DB_NAME () = '' en cas d'OP



3
votes

Voici comment sélectionner la base de données, la table et le nom du serveur:

SELECT COUNT(1) AS TABLECOUNT, @@SERVERNAME as 'serverName' FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'CALCULATION_SCHEDULE' 
and @@SERVERNAME ='xx' and TABLE_CATALOG ='database name'

cliquez sur ici pour en savoir plus sur le serverName


0 commentaires