Jakie są najlepsze praktyki dla zapewnienia, że Twój SQL może być uruchamiany wielokrotnie bez otrzymywania błędów w kolejnych uruchomieniach?Ponownie uruchamiane skrypty SQL Server
np.
- sprawdzeniu, że tabele nie istnieją już przed stworzeniem im
- sprawdzeniu, że kolumny nie istnieją już przed utworzeniem lub zmianą nazwy
- z wycofania transakcji w przypadku błędu
- Jeśli spadek tabel, które istnieją przed tworząc je od nowa, najpierw upuść ich zależności, i nie zapomnij odtworzyć ich po użyciu
- Używanie CREATE LUB ALTER PROCEDURE zamiast CREATE PROCEDURE lub ALTER PROCEDURE, jeśli twój smak SQL obsługuje to
- Utrzymanie wewnętrznego schematu wersjonowania, więc ten sam SQL po prostu nie jest uruchamiany dwa razy w pierwszej kolejności. W ten sposób zawsze wiesz, gdzie jesteś, patrząc na numer wersji.
Wyeksportuj istniejące dane do instrukcji INSERT i całkowicie odtwórz cały DB od podstaw.
upuszczanie tabel przed ich tworzenia (nie najbezpieczniejszą rzeczą kiedykolwiek, ale będzie działać w kropce, jeśli wiesz co robisz)
edit: Szukałem czegoś takiego:
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[foo]')
AND OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
DROP TABLE foo
Czy inni używają takich stwierdzeń lub czegoś lepszego?
edit: Lubię JHONNY za sugestię:
IF OBJECT_ID('table_name') IS NOT NULL DROP TABLE table_name
Robię to dla kolumn dodając:
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]
bym usunąć upuszczanie tabel przed ich tworzenia. Nie chcesz upuszczać tabel z danymi! –
Zgoda, prawdopodobnie nie jest to najbezpieczniejsze. Próbowałem po prostu włączyć piłkę do tego rodzaju reakcji, których szukałem. –