Ich versuche, ein einfaches Skript zu erstellen, um die Ergebnisse einer komplexen Ansicht in eine Tabelle für die Berichterstattung auszugeben. Ich habe Synonyme verwendet, um die Ansichts- und Tabellennamen zu optimieren.Wie kann ich überprüfen, ob die Tabelle hinter einem Synonym existiert
Die Idee ist, dass der Benutzer des Skripts den Namen der Ansicht, die sie als Quelle verwenden möchten, und den Namen der Zielberichterstattungstabelle am Anfang und weg von ihnen setzen. Wenn die Tabelle nicht existiert, sollte das Skript sie erstellen. Wenn die Tabelle bereits existiert, sollte das Skript nur die Datensätze aus der Sicht kopieren, die noch nicht in der Tabelle enthalten sind.
Das Skript unten deckt alle diese Anforderungen, aber ich kann nicht eine schöne Art und Weise zu überprüfen, ob der Tisch hinter dem Synonym bereits vorhanden finden:
CREATE SYNONYM SourceView FOR my_view
CREATE SYNONYM TargetReportingTable FOR my_table
-- Here's where I'm having trouble, how do I check if the underlying table exists?
IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_name = TargetReportingTable) = 0
BEGIN
-- Table does not exists, so insert into.
SELECT * INTO TargetReportingTable FROM SourceView
END
ELSE
BEGIN
-- Table already exists so work out the last record which was copied over
-- and insert only the newer records.
DECLARE @LastReportedRecordId INT;
SET @LastReportedRecordId = (SELECT MAX(RecordId) FROM TargetReportingTable)
INSERT INTO TargetReportingTable SELECT * FROM SourceView WHERE RecordId > @LastReportedRecordId
END
DROP SYNONYM SourceView
DROP SYNONYM TargetReportingTable
Ich weiß, ich könnte nur erhalten die Benutzer des Skripts Kopieren Sie den Tabellennamen sowohl in die Zeile 'information_schema' als auch in das Synonym oben, was jedoch Fehlermöglichkeiten bietet.
Ich weiß auch, ich könnte etwas schmutzig tun wie den Tabellennamen in eine Variable und Blat die SQL-out als String, aber das macht mich ein bisschen krank fühlen!
Gibt es eine elegante SQL-Methode, mit der ich überprüfen kann, ob die Tabelle hinter dem Synonym existiert? Oder ein ganz anderer Weg, um ein Problem zu lösen?
Sie bitte Ihre Frage mit den spezifischen RDBMS Tag, nicht nur "SQL" – Barmar
Sorry, Rookie Fehler. Danke für die Bearbeitung. – Tom
Können wir die Synonympunkte in der Datenbank annehmen, in der sich das Synonym befindet, oder auf eine andere db zeigen? –