Re-ausführbare SQL Server-Skripts
Was sind die besten Methoden, sicherzustellen, dass Ihre SQL-beliebig oft ausgeführt werden kann, ohne Fehler zu erhalten auf den nachfolgenden Auflagen?
z.B.
- überprüfung, dass die Tische nicht bereits vorhanden sind, bevor Sie zu erstellen
- überprüfen Sie, dass die Spalten nicht bereits vorhanden sind vor der Erstellung oder Umbenennung
- Transaktionen mit rollback on error
- Wenn Sie drop-Tabellen, die vorhanden sind, bevor Sie erstellen Sie Sie neu, lassen Ihre Abhängigkeiten zuerst zu, und vergessen Sie nicht, erstellen Sie Sie nach
- Mit CREATE ODER ALTER PROCEDURE-Anweisung anstelle von CREATE PROCEDURE oder ALTER PROCEDURE-wenn Ihr Geschmack von SQL unterstützt es
- Pflegen eine interne Versionierung Schema, also die gleiche SQL einfach nicht zweimal den ersten Platz. Auf diese Weise wissen Sie immer, wo Sie gerade sind, indem man die version-Nummer.
- Exportieren Sie die bestehenden Daten in INSERT-Anweisungen und komplett neu erstellen die gesamte DB von Grund auf neu.
- Tabellen löschen, bevor Sie zu erstellen (nicht die sicherste Sache überhaupt, aber arbeiten in eine Prise, wenn Sie wissen was Sie tun)
Bearbeiten:
Ich war auf der Suche nach so etwas wie dieses:
IF EXISTS ( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[foo]')
AND OBJECTPROPERTY(object_id, N'IsUserTable') = 1 )
DROP TABLE foo
Tun, andere verwenden Sie Aussagen wie diese oder etwas besser?
Bearbeiten:
Ich mag Jhonny ' s Vorschlag:
IF OBJECT_ID('table_name') IS NOT NULL DROP TABLE table_name
Tue ich dies für das hinzufügen von Spalten:
IF NOT EXISTS ( SELECT *
FROM SYSCOLUMNS sc
WHERE EXISTS ( SELECT id
FROM [dbo].[sysobjects]
WHERE NAME LIKE 'TableName'
AND sc.id = id )
AND sc.name = 'ColumnName' )
ALTER TABLE [dbo].[TableName] ADD [ColumnName]
Würde ich entfernen Sie Tabellen löschen, bevor Sie zu erstellen. Sie würde nicht wollen, um die drop-Tabellen mit Daten!
Vereinbart, es ist wahrscheinlich nicht das sicherste, was zu tun ist. Ich habe nur versucht, den ball ins Rollen auf die Arten von Antworten, die ich suchte.
Vereinbart, es ist wahrscheinlich nicht das sicherste, was zu tun ist. Ich habe nur versucht, den ball ins Rollen auf die Arten von Antworten, die ich suchte.
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das wichtigste in der Praxis sicherstellen, dass Ihre Skripts wieder lauffaehig ist....laufen Sie gegen eine test-Datenbank mehrere Male nach änderungen der Skript. Die Fehler, die Sie stoßen, sollte die Form Ihrer Praxis.
BEARBEITEN
Reaktion auf deine Bearbeitung auf syntax, im Allgemeinen ich denke, es ist am besten zu vermeiden, werden die Systemtabellen in der Gunst des Systems Ansichten z.B.
InformationsquelleAutor cmsjr
Hinzufügen, um Ihre Liste:
CREATE OR ALTER PROCEDURE
stattCREATE PROCEDURE
oderALTER PROCEDURE
wenn Ihr Geschmack von SQL unterstützt esAber letztendlich habe ich würde gehen Sie mit einer der folgenden:
INSERT
Aussagen und komplett neu erstellen die gesamte DB von Grund auf neu.InformationsquelleAutor lc.
Dinge einfacher zu machen, konfigurieren Sie die management studio-Skript-Objekte als rerunnable
InformationsquelleAutor
Vor kurzem fand ich ein check-in für die Existenz, die ich nicht kannte, existierte, und ich mochte es, weil es kürzer
bevor ich verwendet, um zu verwenden
Die ich nützlich gefunden, weil es ein bisschen mehr portable (MySql, Postgres, etc), unter Berücksichtigung der Unterschiede, natürlich
InformationsquelleAutor Jhonny D. Cano -Leftware-
Für die Aufrechterhaltung schemas, betrachten ein migration tool. Ich denke, LiquiBase würde für SQL Server.
InformationsquelleAutor Todd R
Werden Sie müssen auch prüfen, ob Fremdschlüssel für alle Tabellen, die Sie möglicherweise fallen/Neuerstellen. Berücksichtigen Sie außerdem alle Daten-änderungen, die Sie machen könnten - Zeilen löschen, bevor Sie versuchen, einfügen einer zweiten Zeit usw.
Vielleicht möchten Sie auch zu stellen im code zu überprüfen, für die Daten vor dem löschen von Tabellen als Schutz, so dass Sie nicht fallen, Tabellen, die bereits eingesetzt werden.
InformationsquelleAutor Tom H
Für eine SQL-batch-Anweisung können Sie Problem
Dies ist nur ein FYI, ich lief es 10 mal
Dies ist nur ein FYI, ich lief es 10 mal
InformationsquelleAutor jerryhung
Dem "IF OBJECT_ID('table_name', 'U') IST NICHT NULL" - syntax ist gut, es kann auch verwendet werden für ein Verfahren:
WENN OBJECT_ID('procname', 'P') IST NICHT NULL
...
... und Trigger, views, etc... Wahrscheinlich gute Praxis zu geben Sie den Typ (U für Tisch -, P-prog, etc.. erinnere mich nicht die genauen Buchstaben für alle Typen) im Falle Ihrer Benennung strandards erlauben, Prozeduren und Tabellen zu ähnliche Namen haben...
Darüber hinaus könnte es eine gute Idee sein, erstellen Sie Ihre eigenen Prozeduren, die änderungen der Tabellen, mit Fehlerbehandlung richtige für Ihre Umgebung. Zum Beispiel:
Tabelle
Solchen procs macht die Erstellung wiederholbar (im gleichen oder anderen db) - change scripts viel einfacher.
/B
InformationsquelleAutor
Habe ich beschreiben, ein paar Schecks in meinem post DDL 'WENN nicht Vorhanden ist," Bedingungen zu machen SQL-Skripts erneut ausführbar
InformationsquelleAutor