Gibt es eine portable Möglichkeit zu bestimmen, ob eine Datenbanktabelle bereits existiert oder nicht?Portable SQL, um festzustellen, ob eine Tabelle existiert oder nicht?
Antwort
Tragbare? Ich denke nicht.
Vielleicht ist die nächstgelegene Sie erhalten können, ist:
select * from <table>
Und dies würde einen Fehler zurück, wenn die Tabelle nicht existiert.
Aye Alan, das ist der Schluss, zu dem ich gekommen bin. Lame! – jkp
Dies ist so portabel wie es nur geht, leider:
select
count(*)
from
information_schema.tables
where
table_name = 'tablename'
and table_schema = 'dbo'
Dies funktioniert auf jeden Fall auf SQL Server, MySQL und Postgres. Nicht so sehr auf Oracle. Sie müssten dafür auf das Oracle Data Dictionary zugreifen. Es gibt jedoch ein Open-Source-Projekt, das creates information_schema
in Oracle aus dem Data Dictionary. Sie können das versuchen, wenn Sie absolute Portabilität benötigen.
P.S.-Schema muss nicht dbo
sein, aber das ist am häufigsten.
vergiss nicht, auch nach dem Schema zu suchen. dbo.tablename und MySchema.tablename könnten beide existieren. –
Da jedes DBMS eine eigene Metabasis hat, denke ich, dass die "portabelste" Methode die Verwendung des Anwendungsaufrufers selbst ist. Etwas wie
try
execute("select top 1 * from table")
return (true)
catch
return false
Versuch, die Tabelle abzufragen. Wenn die Abfrage fehlschlägt - Sie erhalten einen Fehler, der nicht existiert.
Das ist wahrscheinlich so portabel wie Sie bekommen können. Die Last, das Ergebnis zu erzeugen, hängt dann von dem Code ab, der die Tabelle/Datenbank abfragt.
Halten Sie die Abfrage so einfach wie möglich, um andere mögliche Fehler zu vermeiden
Die INFORMATION_SCHEMA-Ansichten sind ANSI-Standard - diese sollten also Ihre tragbarste Option sein. Vergessen Sie nicht, das Schema und Tabellentyp auf Ihre where-Klausel hinzuzufügen ...
if exists(select *
from information_schema.tables
where table_schema = 'dbo'
and table_name = 'MyTable'
and table_type = 'basetable')
begin
-- your code here
end
Hier ist etwas, das einigermaßen tragbar ist:
wählen now() aus der Tabelle Grenze 1;
Es beruht nicht auf Wissen einer bestimmten Spalte.
Es entsteht nicht der Overhead, den count (*) manchmal hat.
Es spielt keine Rolle, ob die Tabelle leer ist oder nicht.
Es schlägt fehl, wenn die Tabelle nicht existiert.
Funktioniert nicht mit SQLServer – Toto
' now() 'ist nicht" tragbar ". 'current_timestamp' wäre –
würde ich
select 'x' from <table_name> where 0=1;
Der Nachteil ist, sagen, dass, wenn Sie eine Fehlermeldung erhalten, können Sie sicher wissen nicht, was die eigentliche Ursache war. Es könnte Tabelle fehlen oder z.B. ein Verbindungsfehler Sie können die Fehlermeldung analysieren, aber definitiv nicht tragbar.
- 1. Um festzustellen, ob eine Spalte in Datenrahmen oder nicht
- 2. Überprüfen Sie, ob eine SQL-Tabelle existiert
- 3. Was ist der beste Weg festzustellen, ob eine temporäre Tabelle in SQL Server existiert?
- 4. Generische Möglichkeit, festzustellen, ob eine Spalte in ADO.NET existiert
- 5. festzustellen, ob $ _SESSION superglobal in PHP existiert
- 6. Gibt es eine Möglichkeit festzustellen, ob ein benutzerdefiniertes Modul existiert?
- 7. Schnelle Möglichkeit festzustellen, ob eine DataContext-Tabelle oder -Ansicht vorhanden ist
- 8. Gibt es bessere Möglichkeiten festzustellen, ob eine Spalte in einer Tabelle leer ist oder nicht?
- 9. Eine Zeichenkette prüfen, um festzustellen, ob eine bestimmte Gruppierung existiert (PHP)?
- 10. Überprüfen, ob eine Tabelle in MySQL existiert
- 11. ADO.Net Excel, Prüfen, ob eine Tabelle existiert?
- 12. SQL Server - SQL, um festzustellen, ob ein Ausdruck eine integrierte Funktion ist
- 13. Wie überprüft man, ob eine Tabelle in Hive existiert?
- 14. SQL-Fehler: ORA-00942 Tabelle oder Sicht existiert nicht
- 15. Wie überprüfe ich eine Tabelle, um festzustellen, ob eine Zeichenfolge bereits verwendet wird?
- 16. Ein Algorithmus um festzustellen, ob eine Nummer zu einer Gruppe gehört oder nicht
- 17. Regex um festzustellen, ob eine URL ein Bild ist oder nicht?
- 18. SQLite: Erkennen, ob eine Rowid existiert
- 19. RegEx, um festzustellen, ob eine Zeichenfolge ein bestimmtes Zeichen enthält
- 20. Portable Möglichkeit, herauszufinden, ob ein Befehl existiert (C/C++)
- 21. Symfony2: Überprüfen, ob eine Sitzung existiert oder nicht
- 22. SQL-Abfrage verwenden, um zu bestimmen, ob eine Tabelle
- 23. Wie erkenne ich, ob eine Tabelle existiert (die keine Klasse oder ID hat)
- 24. Excel/VBA, um zu prüfen, ob eine Zeile existiert
- 25. Python - überprüfen, ob ein System 32 oder 64 Bit ist, um festzustellen, ob die Funktion ausgeführt werden soll oder nicht?
- 26. Wie überprüfe ich, ob eine Zeile existiert oder nicht?
- 27. Prüfen, ob die Tabelle in der Datenbank existiert - PL SQL
- 28. Durchsuchen eines Feldes in SQL, um festzustellen, ob es eine Python-Variable enthält
- 29. Wie überprüft man die Tabelle existiert oder nicht existiert
- 30. Abfrage, um festzustellen, ob Backup Exec Backups erstellt
Most Portable: _select * von YourTable_, wenn Sie einen Fehler erhalten, dann ist es nicht vorhanden, wenn Sie keinen Fehler erhalten, ist es vorhanden. ;-) –