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
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
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.
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.
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.
2012
13
Aprile
Introducing Microsoft SQL Server 2012: Ebook gratuito
Maurizio Ceravolo
Con il rilascio di SQL Server 2012, Microsoft pubblica in maniera gratuita l'ebook "Introducing Microsoft SQL Server 2012" per iniziare a conoscere il nuovo dbms.


Archivio Mensile Blog
Tag Cloud
Apple community domini evoluzionismo digitale Facebook geek Google Google News Google+ Groupon humor IBM innovazione iPad marketing Microsoft SEO social network social plugin video
Ultimi Post
I migliori di oggi
I più popolari del mese
Top post