Blog
home > blog > Abilitare e disabilitare i vincoli su un database SQL Server

Tag: sql, SQL Server, stored procedure

Abilitare e disabilitare i vincoli su un database SQL Server

Due stored procedure per abilitare e disabilitare i vincoli su un database SQL Server.
di Maurizio Ceravolo
Alcune volte per operazioni di manutenzione o per importare dei dati nel database SQL Server occorre disabilitare tutti i vincoli presenti per evitare errori durante le procedure. Ovviamente è sempre sconsigliato eliminare tutti i vincoli, perchè si potrebbero fare degli errori durante la nuova creazione degli stessi.

SQL server mette a disposizione un comando per disabilitare i vincoli:

ALTER TABLE NomeTabella NOCHECK CONSTRAINT ALL

Se dovessimo farlo su tutto il database, dovremmo a mano andare a scrivere questa istruzione per ogni tabella presente. Con il rischio di fare errori. Per questo ho scritto due semplici stored procedure che automatizzano questa operazione.

La prima permette di abilitare o disabilitare i vincoli su una tabella

-- =============================================
-- Author: <ideativi.it>
-- Create date: <01/10/2010>
-- Description: <Abilitazione e disabilitazione dei vincoli di una tabella>
-- =============================================
CREATE PROCEDURE [dbo].[spFrameworkAbilitaDisabilitaVincoliTabella]
@NomeTabella varchar(128),
@Abilita BIT = 1
AS
DECLARE @SQL VARCHAR(500)
IF @Abilita = 0 
BEGIN 
SET @SQL = 'ALTER TABLE '+ @NomeTabella + ' NOCHECK CONSTRAINT ALL' 
END
ELSE 
BEGIN 
SET @SQL = 'ALTER TABLE ' + @NomeTabella + ' CHECK CONSTRAINT ALL' 
END
EXEC (@SQL)

La seconda effettua un ciclo fra tutte le tabelle del database e richiama la prima stored procedure.

-- =============================================
-- Author: <ideativi.it>
-- Create date: <01/10/2010>
-- Description: <Permette di abilitare o disattivare i vincoli su tutto il database>
-- =============================================
CREATE PROCEDURE [dbo].[spFrameworkAbilitaDisabilitaVincoliDataBase]
@Abilita BIT = 1
AS

DECLARE @NomeTabella as varchar(max)
DECLARE curTabella CURSOR FOR SELECT Table_Name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
OPEN curTabella
FETCH NEXT FROM curTabella INTO @NomeTabella
WHILE @@FETCH_STATUS = 0 
BEGIN 
print ('Elaborazione Tabella: ' +@NomeTabella) 
exec spFrameworkAbilitaDisabilitaVincoliTabella @NomeTabella, @Abilita 
FETCH NEXT FROM curTabella INTO @NomeTabella 
END
CLOSE curTabella
DEALLOCATE curTabella

L'interfaccia della stored è molto semplice. Il parametro @Abilita è un booleano è permette di abilitare con true o disabilitare con false i vincoli dell'intero database.
Post correlati
2011
4
Febbraio
Dimensioni di tutte le tabelle di un database SQL Server
Maurizio Ceravolo
Vediamo una stored procedure per calcolare le dimensioni, in numero di record ed in occupazione su disco, di dati ed indici di ogni tabella di un database su SQL Server.
2011
18
Marzo
TSQL: convertire un numero in esadecimale
Maurizio Ceravolo
Alle volte c'è la necessità di convertire un numero in esadecimale direttamente dalla fonte dati per generare dei codici colore da usare direttamente su una pagina web.
2010
9
Dicembre
TSQL: concatenare più record senza usare un cursore
Maurizio Ceravolo
Concatenare più record di una tabella in un'unica stringa necessita un cursore, che però è poco performante. Vediamo un metodo tramite FOR XML PATH per concatenare con una query secca.
2010
28
Ottobre
Eseguire una query SQL da un SQL Server ad un altro
Maurizio Ceravolo
Esaminiamo il modo per eseguire query SQL fra database differenti e server differenti
2012
12
Aprile
SQL Server 2012 è stato rilasciato
Maurizio Ceravolo
Microsoft ha comunicato di aver reso disponibile per la vendita ed il download SQL Server 2012, l'ultima release del suo DBMS.


Archivio Mensile Blog
Tag Cloud
anagrafica clienti Apple Calcolo distribuito Facebook finanza geek Google Google Drive Google+ humor infografica informatica innovazione Microsoft rapporti sociali social network video videogiochi viral Windows Phone 7
Ultimi Post
I migliori di oggi
I più popolari del mese
Top post