Post by Lorenzo BenagliaDato che vuoi eliminare tutti i dati, perché non generare semplicemente uno
script dei metadati? :-D
Sia Enterprise Manager che SQL Server Management Studio offrono una
procedura guidata semplicissima per ottenere questo file ed una volta
ottenuto puoi eliminare il db coi dati, ricreandolo "immacolato"
rieseguendo lo script.
....sì è vero.
La mia era solo una curiosità su come poter implementare la cosa
programmaticamente.
Visto che ci sono colgo l'occasioni per porti un quesito.
Sto cercando di modificare lo script che ha postato 'tiriamoavanti' sono 2
ore ma non ne vengo a capo.
Per come lo ha postato lui non gestisce gli schemi e inoltre si blocca nel
caso ci siano dei vincoli.
Ho cercato di modificare lo script per risolvere i due problemi.
Ma mi da un errore nella disattivazione dei vincoli.
Sono sicuro che tu ti rendereai conto del problema in un secondo......
Nel caso tu possa aiutarmi ti ringrazio in anticipo.
ciao
MB
CREATE PROCEDURE [Systems].[usp_SvuotaDB] AS
SET NOCOUNT ON
DECLARE @TRONCA NCHAR(512)
DECLARE @TNAME CHAR(50)
DECLARE ALL_TABLES CURSOR LOCAL FAST_FORWARD FOR --ALL_TABLES è il nome del
cursore.
SELECT [NAME] FROM SYSOBJECTS WHERE XTYPE = 'U' AND [NAME] LIKE 'tbl_%'
--U=tabella definita dall'utente
OPEN ALL_TABLES
-- READ FUORI LOOP
FETCH NEXT FROM ALL_TABLES INTO @TNAME
WHILE @@FETCH_STATUS = 0
BEGIN
declare @schema nvarchar(128);
set @schema = (select table_schema from INFORMATION_SCHEMA.tables
where table_name =@TNAME)
declare @complete_tblName nvarchar(512);
set @complete_tblName = '[' + @schema + '].' + RTRIM(LTRIM(@TNAME));
declare @altertbl as nvarchar(1024)
set @altertbl = 'ALTER TABLE ' + @complete_tblName + ' NOCHECK CONSTRAINT
ALL'
EXEC @altertbl
SET @TRONCA = 'TRUNCATE TABLE ' + @complete_tblName
-- SELECT @TRONCA
EXEC sp_executesql @TRONCA
set @altertbl = 'ALTER TABLE ' + @complete_tblName + ' CHECK CONSTRAINT ALL'
EXEC @altertbl
FETCH NEXT FROM ALL_TABLES INTO @TNAME
END
CLOSE ALL_TABLES --Chiude un cursore aperto rilasciando il set di risultati
corrente e liberando i blocchi dei cursori mantenuti attivi sulle righe in
cui è posizionato il cursore
DEALLOCATE ALL_TABLES --Rimuove un riferimento a un cursore
CHECKPOINT --Scrive su disco le pagine dirty
SET NOCOUNT OFF