2010-04-23 13 views
38

Czy można zmienić typ kolumny w bazie danych SQL Server 2008 z varchar(255) na varchar(MAX) bez konieczności upuszczania tabeli i odtwarzania?Varchar (255) do Varchar (MAX)

SQL Server Management Studio zgłasza mi błąd za każdym razem, gdy próbuję to zrobić, ale aby zaoszczędzić sobie bólu głowy, dobrze byłoby wiedzieć, czy mogę zmienić typ bez konieczności DROP i CREATE.

Dzięki

+2

Dziwne, wypróbowane w SQL Server 2005, działa dobrze dla mnie. – anonymous

+2

BTW, jaki był błąd? – anonymous

+1

"Zapisywanie zmian jest niedozwolone. Wprowadzone zmiany wymagają usunięcia i ponownego utworzenia następujących tabel. Wprowadziłeś zmiany do tabeli, których nie można ponownie utworzyć lub włączono opcję Zapobieganie zapisywaniu zmian, które wymagają ponownego utworzenia tabeli. " Opcja "Zapobieganie zapisywaniu zmian" nie jest włączona ... – Darbio

Odpowiedz

66

Powinieneś być w stanie to zrobić przy użyciu TSQL.

Coś

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 
+0

to zadziałało. dzięki – Darbio

+0

dla mnie również pomógł mi ... dzięki –

11

„Zapisywanie zmian jest niedozwolone. Wprowadzone zmiany wymagają ponownego pobrania poniższych tabel i ponownego utworzenia . Wprowadzono zmiany do tabeli, która nie może być ponownie utworzona lub włączona opcja Zapobieganie zapisywaniu zmian wymagających ponownego utworzenia tabeli . " Opcja „Prevent zapisywania zmian” nie jest włączona ..

To nowa „funkcja” w SQL Server Management Studio 2008, która domyślnie jest włączona. Za każdym razem, gdy wprowadzasz większą zmianę, SSMS może tylko odtworzyć tabelę, tworząc nowy, a następnie przesuwając dane ze starego - wszystko w tle (zmiany te obejmują między innymi zmianę kolejności kolumn).

Ta opcja jest domyślnie wyłączona, ponieważ jeśli tabela zawiera ograniczenia FK i inne elementy, ten sposób ponownego uruchomienia tabeli może się nie powieść. Ale na pewno możesz włączyć tę funkcję!

alt text http://i42.tinypic.com/19pegj.png

To pod Tools > Options i po odznacz tę opcję można zrobić tego rodzaju zmian struktury tabeli w kreatorze tabel ponownie.

+0

Dzięki marc_s. Miałem już to zaznaczone i wciąż powstrzymywało mnie przed wprowadzaniem zmian. Zmienione przez nich powyższe stwierdzenia zadziałały, kiedy sam je napisałem. Dzięki :) – Darbio

+0

@JD: hmm ... odd ... zazwyczaj to jest problem - cieszę się, że już masz rozwiązanie! –

1

Należy pamiętać
z czymś

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

Martina Smitha answare:

Jeśli zwiększając ją do varchar(100 - 8000) (czyli coś innego niż varchar(max)) i robisz to poprzez TSQL zamiast GUI SSN

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
i nie zmieniając opcji nullability kolumny NULL do NOT NULL (który zablokuje tabelę, a wszystkie wiersze zostaną sprawdzone i potencjalnie zapisane do lub od NOT NULL do NULL w niektórych okolicznościach, to jest tylko szybka zmiana tylko metadanych. Może być konieczne poczekanie na blokadę SCH-M na stole, ale gdy dojdzie do tego, że zmiana będzie prawie natychmiastowa. Jednym z ostrzeżeń, o których należy pamiętać, jest to, że podczas oczekiwania na blokadę inne zapytania będą blokowane, zamiast przeskakiwać kolejkę przed nimi, dlatego warto najpierw rozważyć dodanie SET LOCK_TIMEOUT. Upewnij się również, że w instrukcji ALTER TABLE jawnie określono NOT NULL, jeśli jest to oryginalny stan kolumny, ponieważ w przeciwnym razie kolumna zostanie zmieniona, aby umożliwić NULL.

+0

Czy to nie jest identyczne z [tą istniejącą odpowiedzią] (http://stackoverflow.com/a/2696003/1402846)? – Pang

+1

Dlaczego problem z ALTEREM zmienia się na varchar (MAX)? – Chris