Fejlmeddelelse, når du prøver at gemme en tabel i SQL Server: "Det er ikke tilladt at gemme ændringer"

Gælder for: SQL Server 2008 ExpressSQL Server 2008 Express with Advanced ServicesSQL Server 2008 Standard

Symptomer


Når du bruger DDL (Data Definition Language) til at ændre en tabel og derefter prøver at gemme tabellen i Microsoft SQL Server 2008, kan du modtage følgende meddelelse:

Det er ikke tilladt at gemme ændringer. De ændringer, du har foretaget, kræver, at følgende tabeller skal droppes og genoprettes. Du har enten lavet ændringer i en tabel, der ikke kan genoprettes, eller markeret indstillingen Prevent saving changes that require table re-creation.

Årsag


Dette problem opstår, når indstillingen Prevent saving changes that require table re-creation er aktiveret, og du foretager en eller flere af følgende ændringer i tabellen:
  • Du ændrer indstillingen Allow Nulls for en kolonne.
  • Du ændrer rækkefølgen af kolonner i tabellen.
  • Du ændrer en kolonnes datatype.
  • Du tilføjer en ny kolonne.
Når du laver om på en tabel, så du ændrer tabellens metadatastruktur og derefter gemmer tabellen, skal tabellen genoprettes baseret på disse ændringer. Dette kan resultere i tab af metadata og i et direkte tab af data under genoprettelsen af tabellen. Hvis du aktiverer indstillingen Prevent saving changes that require table re-creation i sektionen Designer i vinduet SQL Server Management Studio (SSMS) Options, modtager du den fejlmeddelelse, der er nævnt i afsnittet "Symptomer".

Løsning


Du kan løse dette problem ved at bruge Transact-SQL-sætninger til at foretage ændringer i tabellens metadatastruktur. Få flere oplysninger ved at se følgende emne i SQL Server Books Online:

http://msdn.microsoft.com/da-dk/library/ms190273.aspx

Hvis du f.eks. vil ændre kolonnen MinDato med typen dato/kl. i en tabel, der kaldes MinTabel, så den accepterer NULL-værdier, kan du bruge:

alter table MyTable alter column MyDate7 datetime NULL

Vigtigt! Vi anbefaler på det kraftigste, at du ikke løser dette problem ved at slå indstillingen Prevent saving changes that require table re-creation fra. Du kan finde flere oplysninger om risikoen ved at slå denne indstilling fra i afsnittet "Flere oplysninger".

Status


Microsoft har bekræftet, at denne fejl forekommer i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Flere oplysninger


Hvis du vil ændre indstillingen Prevent saving changes that require the table re-creation skal du følge disse trin:
  1. Åbn SQL Server Management Studio (SSMS).
  2. Klik på Options i menuen Tools.
  3. Klik på Designers i navigationsruden i vinduet Options.
  4. Markér eller ryd markeringen af Prevent saving changes that require the table re-creation, og klik derefter på OK.
Bemærk! Hvis du deaktiverer denne indstilling, får du ikke en advarsel, når du gemmer de ændringer, du har foretaget i tabellens metadatastruktur. I dette tilfælde kan du miste data, når du gemmer tabellen.

Risiko ved at slå indstillingen "Prevent saving changes that require table re-creation" fra

Selvom du kan undgå at genoprette en tabel, hvis du slår denne indstilling fra, kan den også medføre, at ændringer går tabt. Lad os f.eks. antage, at du aktiverer funktionen Change Tracking i SQL Server 2008 for at spore ændringer i tabellen. Når du udfører en handling, der får tabellen til at blive genoprettet, modtager du den fejlmeddelelse, der er nævnt under afsnittet "Symptomer". Slår du imidlertid denne indstilling fra, slettes de eksisterende sporingsoplysninger, når tabellen genoprettes. Vi anbefaler derfor, at du ikke løser dette problem ved at slå indstillingen fra.

For at finde ud af, om funktionen Change Tracking er aktiveret for en tabel, skal du følge disse trin:
  1. I SQL Server Management Studio skal du finde tabellen i Object Explorer.
  2. Højreklik på tabellen, og klik på Properties.
  3. Klik på Change Tracking i dialogboksen Table Properties.
Hvis værdien af menupunktet Change Tracking er True, er denne indstilling aktiveret for tabellen. Hvis værdien er False, er denne indstillingen deaktiveret.

Når funktionen Change Tracking er aktiveret, skal du bruge Transact-SQL-sætninger til at ændre tabellens metadatastruktur.

Trin til genskabelse af problemet

  1. I SQL Server Management Studio skal du oprette en tabel, der indeholder en primær nøgle i værktøjet Table Designer.
  2. Højreklik på den database, der indeholder denne tabel, og klik derefter på Properties.
  3. Klik på Change Tracking i dialogboksen Database Properties.
  4. Indstil værdien af menupunktet Change Tracking til True, og klik derefter på OK.
  5. Højreklik på tabellen, og klik på Properties.
  6. Klik på Change Tracking i dialogboksen Table Properties.
  7. Indstil værdien af menupunktet Change Tracking til True, og klik derefter på OK.
  8. Klik på Options i menuen Tools.
  9. Klik på Designers i dialogboksen Options.
  10. Klik for at markere afkrydsningsfeltet Prevent saving changes that require table re-creation, og klik derefter på OK.
  11. Skift indstillingen Allow Nulls for en eksisterende kolonne i værktøjet Table Designer.
  12. Prøv at gemme ændringen i tabellen.