User defined type módosítása

UDT-t nem lehet módosítani. Mondhatnánk, vége a dalnak, ez van. De mi mindenképpen szeretnénk! Akkor egyszerű, dobjuk el, és hozzuk létre megint! Azt viszont nem engedi a szerver, mert valahol hivatkozunk rá. Ördögi kör.

Nincs más megoldás, rondát kell cselekednünk. Meg kell keresnünk, mik függnek a típusunktól, mindet letörölni, letörölni a típusunkat, létrehozni a típusunkat ismét, majd a tőle függő elemeket. Nem egyszerű, nem elegáns, nagyon kell figyelni, de ha nincs jobb ötletem.

Akkor gyorsan, hogyan tudjuk lekérdezni a függőségeket:

select * from information_schema.routines where charindex('ide_jon_a_tipusunk', routine_definition) > 0

Ezzel kapunk egy pofás kis listát, és van egy rakás adatunk. Innen már csak egy lépés, hogy írjunk egy olyan scriptet, aminek beadunk egy típus nevét, és automatikusan kilistázza (ne adj isten le is törli) a rá hivatkozó objektumokat.

Az automatikus törlést azért nem ajánlom, egy ilyen feladatot mindenképpen nagyon körültekintően kell elvégezni. A végén persze akár le tudjuk scriptelni, de szerintem a legtöbb esetben még mindig kézzel kell az adatbázist masszírozni.