Procedura aggiornamento tipo dato per piu tabelle (causa migrazione)

martedì 03 novembre 2009 - 20.07

FPC Profilo | Newbie

Buongiorno a tutti ho questo problema: ho ereditato un database (SQL Server 2008) che va bene per la mia applicazione solo che devo fare alcune modifiche queste consistono in cambiare il tipo dato BIT in INT per tutte le colonne delle tabelle del mio db. Siccome sono alle prime armi sono solo riuscito a tirare fuori questo:

USE GIFPaghe

SELECT * FROM sys.all_objects WHERE type='U'
SELECT * FROM sys.all_columns WHERE system_type_id=104 and object_id>0


la prima select mi ritorna il nome di tutte le tabelle presenti nel database
la seconda select invece mi ritorna i nomi delle colonne che hanno come tipo dato BIT in tutte le tabelle.

pensavo ad una procedura che agisse facendo un alter table con il risultato di queste due query ma non so da che parte iniziare.

Vi ringrazio per il vostro prezioso aiuto.

lbenaglia Profilo | Guru

>pensavo ad una procedura che agisse facendo un alter table con
>il risultato di queste due query ma non so da che parte iniziare.

Ciao,

Tieni presente che nei fatti il discorso non è così semplice.
Prima di poter modificare il data type di una colonna occorre rimuovere tutti i constraints ed eventuali indici.
Inoltre dovrai spulciare tutte le sp, viste, triggers, udf ed il codice client per apportare le modifiche.
Comunque la seguente query ti permette di generare i comandi di ALTER TABLE che puoi copiare ed eseguire con la dovuta cautela:

SELECT N'ALTER TABLE [' + S.name + N'].[' + T.name + N'] ' + N'ALTER COLUMN [' + C.name + N'] INT ' + CASE C.is_nullable WHEN 1 THEN N'NULL;' ELSE N'NOT NULL;' END AS Command FROM sys.tables AS T JOIN sys.schemas AS S ON T.schema_id = S.schema_id JOIN sys.columns AS C ON T.object_id = C.object_id WHERE C.system_type_id = 104 AND T.type = 'U';

>Vi ringrazio per il vostro prezioso aiuto.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

FPC Profilo | Newbie

Grazie mille proverò, è un database che proviene da access quindi spero di non avere problemi lo farò girare e ti faccio sapere.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5