Existe-t-il un moyen portable de déterminer si une table de base de données existe déjà ou non?Portable SQL pour déterminer si une table existe ou non?
Répondre
Portable? Je ne pense pas.
Peut-être le plus proche, vous pouvez obtenir est:
select * from <table>
et ceci renvoie une erreur si la table n'existe pas.
Aye Alan, c'est la conclusion à laquelle je suis parvenu. Boiteux! – jkp
C'est aussi portable qu'il obtient, malheureusement:
select
count(*)
from
information_schema.tables
where
table_name = 'tablename'
and table_schema = 'dbo'
Cela fonctionne vraiment sur SQL Server, MySQL et Postgres. Pas tellement sur Oracle, cependant. Vous devriez accéder au dictionnaire de données Oracle pour cela. Toutefois, il existe un projet open source creates information_schema
in Oracle à partir du dictionnaire de données. Vous pouvez essayer cela si vous avez besoin d'une portabilité absolue.
P.S.-Schema ne doit pas être dbo
, mais c'est le plus commun.
ne pas oublier de vérifier le schéma aussi. dbo.tablename et MySchema.tablename peuvent tous deux exister. –
Comme chaque SGBD a sa propre métabase, je pense que la façon la plus «portable» de faire cela est d'utiliser l'appelant lui-même. Quelque chose comme
try
execute("select top 1 * from table")
return (true)
catch
return false
Tentative d'interrogation de la table. Si la requête échoue - vous obtenez une erreur, elle n'existe pas.
C'est probablement aussi portable que possible. La charge de produire le résultat dépend alors du code interrogeant la table/base de données. Conserver la requête aussi simple que possible pour éviter d'autres erreurs possibles.
select top 1 *
from MyTable
Les vues INFORMATION_SCHEMA sont conformes à la norme ANSI. Elles devraient donc être votre option la plus portable. Ne pas oublier d'ajouter le schéma et le type table à votre clause where ...
if exists(select *
from information_schema.tables
where table_schema = 'dbo'
and table_name = 'MyTable'
and table_type = 'basetable')
begin
-- your code here
end
Voici quelque chose qui est raisonnablement portable:
sélectionnez maintenant() à partir de 1 TABLE limite;
Il ne dépend pas de la connaissance d'une colonne particulière.
Il n'entraîne pas les frais généraux que le compte (*) a parfois.
Peu importe que la table soit vide ou non.
Échec si la table n'existe pas.
Ne fonctionne pas avec SQLServer – Toto
' now() 'n'est pas" portable ". 'current_timestamp' serait –
Je dirais
select 'x' from <table_name> where 0=1;
L'inconvénient est que si vous obtenez une erreur, vous ne savez pas exactement ce qui était la cause réelle. Il peut manquer un tableau ou par ex. une erreur de connexion. Vous pouvez analyser le message d'erreur, mais certainement ce ne serait pas portable.
- 1. Chemin portable pour savoir si une commande existe (C/C++)
- 2. De meilleurs moyens de déterminer si une colonne d'une table est vide ou non?
- 3. Déterminer si une ressource existe dans ResourceManager
- 4. Comment déterminer si une instance de SQL Server est sensible à la casse ou non
- 5. Générique pour déterminer si une colonne existe dans ADO.NET
- 6. Quelle est la meilleure façon de déterminer si une table temporaire existe dans SQL Server?
- 7. Vérifiez si le fichier existe ou non?
- 8. Un moyen rapide de détecter si une table ou une vue DataContext existe
- 9. Déterminez si la table existe dans SQL Server CE?
- 10. Comment déterminer si une solution particulière est une application WPF ou une application Non WPF?
- 11. ADO.Net Excel, Vérifier si une table existe?
- 12. Déterminer si une méthode existe dans une classe statique
- 13. Pour "table de consultation" ou non?
- 14. Vérifiez si un index non cluster existe sur une colonne de table
- 15. En C#, comment déterminer si une image (jpg, gif ou png) est entrelacée (non progressive) ou non entrelacée (progressive)?
- 16. Déterminer si une valeur existe dans un tableau de hachages
- 17. Déterminer si une valeur ou une expression concrète est passée?
- 18. Comment déterminer si une clé de registre existe dans Wix
- 19. MySQL: Déterminer Table Dynamiquement
- 20. Comment puis-je déterminer si l'adresse IP de l'utilisateur est dans une plage accessible ou non?
- 21. Comment déterminer si une matrice est vide ou non dans matlab?
- 22. Comment est-il nécessaire ou pratique d'écrire du SQL portable?
- 23. Quelle bibliothèque tierce dans .net qui pourrait déterminer correctement si le pdf est corrompu ou non?
- 24. Tables SQl Server: pour entasser ou non?
- 25. Regex pour identifier si une URL est une image ou non?
- 26. Requête Sql pour déterminer le statut?
- 27. Comment déterminer si la session Windows en cours est verrouillée ou non?
- 28. Comment déterminer si SqlConnection est inscrite dans un tx de System.Transactions ou non?
- 29. Quel est le moyen le plus rapide pour déterminer si une URL existe en PHP?
- 30. Critères NHibernate pour une table non liée
plus portable: _select * de YourTable_, si vous obtenez une erreur alors elle n'existe pas, si vous n'obtenez pas d'erreur, elle existe. ;-) –