Tipi di dati definiti dall'utente

martedì 01 febbraio 2011 - 11.54

mmjc23 Profilo | Newbie

Buongiorno a tutti

Ho un grosso problema con un database SQL 2005

Per necessità di un cliente, ho bisogno di aumentare la lunghezza di un campo ID_OPERATORE.
Attualmente il campo, ha come tipo di dati un Tipo di dati definito dall'utente "T_ID_OPERATORE" che consiste in un varchar(20), io dovrei solamente portarlo al valore varchar(30).
Questo campo, è spesso usato come chiave primaria e viene usato sia da funzioni che da StoreProcedure.

Cercando di andare a modificare il tipo di dati da SQL (Enterprise Manager/Management studio express), non posso modificare il tipo di dati.

Come posso fare?
Devo per forza:
-Per ogni tabella che ha quel tipo di colonna come chiave primaria, togliere la chiave primaria
-Per ogni tabella/store procedure/funzione che usa quel tipo di colonna cambiare temporaneamente il tipo di dati
-Eliminare il vecchio tipo di dati
-Ricreare il nuovo tipo di dati modificato
-Riassegnare a tutte le tabelle/store/funzioni il nuovo tipo di dati
-Ricreare le chiavi primarie

(oppure va be, creare uno nuovo tipo corretto e usare quello per tutto...ma devo comunque togliere le chiavi e associare le colonne al nuovo tipo?)

Mi sembra assurdo che non si possa modificare...a sto punto si perde un po' l'utilità di avere un tipo unico per definire tutte le colonne se poi non posso fare nemmeno una semplice modifica.

Grazie

lbenaglia Profilo | Guru

>Devo per forza:
>-Per ogni tabella che ha quel tipo di colonna come chiave primaria,
>togliere la chiave primaria
>-Per ogni tabella/store procedure/funzione che usa quel tipo
>di colonna cambiare temporaneamente il tipo di dati
>-Eliminare il vecchio tipo di dati
>-Ricreare il nuovo tipo di dati modificato
>-Riassegnare a tutte le tabelle/store/funzioni il nuovo tipo
>di dati
>-Ricreare le chiavi primarie
>
>(oppure va be, creare uno nuovo tipo corretto e usare quello
>per tutto...ma devo comunque togliere le chiavi e associare le
>colonne al nuovo tipo?)
Esatto.

>Mi sembra assurdo che non si possa modificare...a sto punto si
>perde un po' l'utilità di avere un tipo unico per definire tutte
>le colonne se poi non posso fare nemmeno una semplice modifica.
Non è assurdo, gli UDT ti permettono di avere una consistenza logica tra le colonne delle tabelle ed i parametri di SP, UDF, variabili, ecc.
Anche se non avessi utilizzato un UDT, avresti avuto lo stesso problema utilizzando un data type nativo.
Fai un test: cosa succede se provi ad estendere una colonna varchar(20) sulla quale hai definito un constraint PK|FK|indice?

>Grazie
Prego.

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

mmjc23 Profilo | Newbie

Grazie mille...davvero gentile e veloce.
Non mi rimane che rassegnarmi e rivedere gran parte del DB allora.


EDIT:
Ma come si fa per creare uno script?
Nel senso, la mia "T_ID_OPERATORE", viene usata da una 20ina di tabelle, le quali sono relazionate tra loro con Primary e Foreign key. Come faccio a risalire e quindi ad andare ad eliminare tutte le chiavi prima di editare i tipi colonna e poi creare nuovamente correttamente la Chiavi?
Grazie ancora
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5