12 messaggi dal 15 agosto 2001
Salve a tutti.
Ho un db di 150 tabelle.
Vorre svuotare tutte le tabelle e riazzerare gli ID identity.
Esiste una funzione che faccia questo velocemente ?

Grazie 1000
100 messaggi dal 28 febbraio 2006
se sei pratico di transact sql puoi farti un piccolo script con un loop apri il database di sistema che contiene il nome di tutte le tabelle e inizi loop ad ogni giro metti il nome della tabella in una varialebiel e puoi fare delete * from variabile fino alla fine della tabella questo ti svuota la tabella altrimenti divena più complesso cioè drop table e la ricrei ex novo ma non te lo consiglio
12 messaggi dal 15 agosto 2001
Purtroppo non sono molto pratico di transact.
Potresti darmi qualche indicazione

Grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
iperione ha scritto:
se sei pratico di transact sql puoi farti un piccolo script con un loop apri il database di sistema che contiene il nome di tutte le tabelle e inizi loop ad ogni giro metti il nome della tabella in una varialebiel e puoi fare delete * from variabile fino alla fine della tabella questo ti svuota la tabella altrimenti divena più complesso cioè drop table e la ricrei ex novo ma non te lo consiglio

manca ancora la parte di reinizializzazione del valore di identity, ed in questo caso devi anche aggiungere DBCC CHECKIDENT utilizzando il reseed, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_dbcc_5lv8.asp..

puoi costruire ad esempio una tabella temporanea per la gestione della cosa sulla quale ciclare per l'esecuzione di DBCC CHECKIDENT. as esempio
SET NOCOUNT ON;
USE Pubs;
GO
CREATE TABLE #Obj (
  TableName varchar(261),
  ToDo tinyint
  );
INSERT INTO #Obj
SELECT QUOTENAME(i.TABLE_SCHEMA, '[]') + '.' + QUOTENAME(i.TABLE_NAME, '[]') AS [Tabella],
  OBJECTPROPERTY (object_id ( QUOTENAME(i.TABLE_SCHEMA, '[]') + '.' + QUOTENAME(i.TABLE_NAME, '[]'))  , 'TableHasIdentity') AS [Identity]
  FROM INFORMATION_SCHEMA.TABLES i 
  WHERE i.TABLE_TYPE = 'BASE TABLE'
    AND OBJECTPROPERTY (object_id ( QUOTENAME(i.TABLE_SCHEMA, '[]') + '.' + QUOTENAME(i.TABLE_NAME, '[]'))  , 'TableHasIdentity') = 1
    AND i.TABLE_NAME <> 'dtproperties';

SELECT * FROM #Obj;

DECLARE @cmd varchar(500), @obj varchar(261);

WHILE 1 = 1 BEGIN
  SELECT TOP 1 @obj = tablename  FROM #Obj WHERE Todo = 1 ;
  IF @@ROWCOUNT = 1 BEGIN 
    SELECT @cmd = 'DBCC CHECKIDENT ( ''' +  @obj + ''' , RESEED, 1)';
    SELECT @cmd;
    EXEC(@cmd);

    UPDATE #Obj SET ToDo = 0 WHERE TableName =  + @obj ;
    END;
  ELSE
    BREAK;
END;
DROP TABLE #Obj;

-- poi ricordati di mettere a posto la tabella 
DBCC CHECKIDENT ( '[dbo].[jobs]')


che restituisce appunto
TableName ToDo
---------------------------------------------- ----
[dbo].[jobs] 1

----------------------------------------------------
DBCC CHECKIDENT ( '[dbo].[jobs]' , RESEED, 1)

Checking identity information: current identity value '14', current column value '1'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Checking identity information: current identity value '1', current column value '14'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.