Archiwum tagów: MSSQL

Usuwanie wszystkich danych z bazy na SQL Server

Czasami zachodzi potrzeba wyczyszczenia całej bazy danych. Jednym rozwiązaniem jest usunięcie bazy i odtworzenie całej struktury, jednak czasem jest to nieporęczne. Alternatywnie można skorzystać z wbudowanej procedury sp_MSForEachTable, która wykonuje zadane zapytanie na wszystkich tabelach w bazie.

Wykonamy więc następujące czynności:

  1. Wyłączenie constraintów
  2. Usunięcie danych
  3. Włączenie constraintów
  4. Zresetowanie kolumn typu identity

Skrypt:

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
 
EXEC sp_MSForEachTable '
 IF OBJECTPROPERTY(object_id(''?''), ''TableHasForeignRef'') = 1
  DELETE FROM ?
 else 
  TRUNCATE TABLE ?
'
GO
 
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
 
EXEC sp_MSForEachTable ' 
IF OBJECTPROPERTY(object_id(''?''), ''TableHasIdentity'') = 1 
DBCC CHECKIDENT (''?'', RESEED, 0) 
' 
GO

Rozwiązanie zapożyczone z Small Workarounds

MSSQL, Odświeżanie metadanych

Przy modyfikacjach schematu db zawierających drop/create obiektów wykorzystywanych w procedurach MSSQL nie odświeża metadanych procedur – powoduje to, że procedura nie pojawia się np. jako zależność nowego obiektu w sp_depends. Aby to naprawić należy procedurę nie tylko zrekompilować, ale też i odświeżyć (O.o)

sp_recompile 'mojaProcedura'
sp_refreshsqlmodule 'mojaProcedura'