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]
3 Réponses :
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>'
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.
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:
Directement dans la requête
WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'CALCULATION_SCHEDULE' AND SERVERPROPERTY('ServerName') = 'YourServer' ;
Via "UTILISER"
USE [dbname] SELECT COUNT(1) AS TABLECOUNT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'CALCULATION_SCHEDULE' ;
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' ;
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 () = '
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
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.