2010. február 17., szerda

Saving changes is not permitted (SQL Server 2008)

Aki SQL Management Studio 2008-cal dolgozik, az belefuthatott már a jelenségbe, hogy bizonyos táblaséma-módosító műveleteket nem képes a grafikus felületen elvégezni. Például ha egy NULL értéket felvenni képes mezőtől szeretnénk elvenni ezt a képességét, akkor a sémamódosítás helyett jön az ábrán látható dialógus, ami aztán a "User canceled out of save dialog (MS Visual Database Tools)" című üzenetbe, majd az addigi módosításaink elvesztésébe torkollnak.

Ezzel azért örvendeztet meg minket a Management Studio, hogy emlékeztessen: ami a felületről 1-2 kattintás, az a rideg valóságban nem mindig olyan egyszerű. Az alábbi séma-módosító műveletek végrehajtása nem triviális:

  • Új mező beszúrása létező oszlopok közé
  • Oszlop törlése
  • NULL érték engedélyezése/tiltása
  • Oszlop adattípusának megváltoztatása
  • Oszlopok sorrendjének megváltoztatása
A végrehajtásuk annyira nem triviális, hogy igazából lehetetlen - az, hogy mégis elvégezhetők, annak köszönhető, hogy a Management Studio a háttérben egy ügyes scriptet generál és futtat. A script egy új táblát hoz létre a kívánt sámával, majd átbűvészkedi bele a régi táblában található adatainkat. Innentől az már csak névdonornak kell: eldobásra kerül, az újonnan létrejött tábla pedig felveszi a személyazonosságát. Pont olyan, mintha.
A GUI felől ebből semmi nem látszik, egy esetet kivéve: ha egy éles, terhelés alatt álló adatbázis sok rekordot tartalmazó tábláján machinálunk, mert azt tuti észre lehet majd venni a GUI felől is. Csak nem afelől a GUI felől, amelyik felől mi szeretnénk.

Ezt a működést hívhatjuk mondjuk "üzemeltető-barát" beállításnak (nehezebb nagy hülyeséget csinálni), fejlesztési időben viszont mezők jönnek-mennek, közelező adatokról derül ki, hogy nem mindig ismertek, és más anomáliák is gyakran történnek - tehát jól esne, ha nem szopatna minket még a Management Studio is.
Szerencsére néhány (hat) kattintással "fejlesző-baráttá" tehető a működés: a Tools -> Options -> Designers -> Table and Database Designers fülön a Prevent saving changes that require table re-creation opció elől ki vell venni a pipát:  Így már vidáman módosíthatunk a sémánkon. Érdemes néha a Generate Change Script gombra is rábökni, hogy miket gépel helyettünk össze a Management Studio. Köszönjük!

3 megjegyzés:

  1. Remek, pont tegnap futottam ebbe a hibába, hogy folyton kaptam a hibát, majd mire rájöttem mi is a probléma elkezdtem gondolkozni is, de eddig nem jutottam el, csak a tábla dobásig.. Köszönet érte!
    VálaszTörlés
  2. Ez hasznos post volt, jónéhány táblát dobtam már emiatt, és már nagyon tele volt a hócipőm az egésszel. Köszöntem
    VálaszTörlés
  3. Ez ma nekem is jól jött, köszi! ;)
    VálaszTörlés