it-swarm-eu.dev

Změna šířky sloupce

Bude nutné zvětšit šířku sloupce (nvarchar) nutně tabulku?

Jinými slovy, lze šířku změnit v produkčním prostředí s aktivními uživateli?

Myslel jsem, že pokud se velikost zvyšuje (na rozdíl od snižování), nebyl by to problém.

40
Fernando

Pokud to děláte pomocí příkazu T-SQL, jak je uvedeno níže, nedojde k žádnému přetažení tabulky a můžete to bezpečně provést v produkčním prostředí:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Pokud to provedete pomocí grafického uživatelského rozhraní SSMS Design Table GUI, bude záležet na tom, jaký skript se rozhodne použít k implementaci změny. Někdy vloží data do dočasné tabulky, zruší původní tabulku, vytvoří novou verzi této tabulky a vloží je zpět do nové. Snadný způsob, jak zjistit, co to bude dělat, je kliknout na tlačítko „Generovat skript“ a podívat se na T-SQL, který plánuje provést.

53
Derek Kromm

Zvětšení šířky sloupce sloupce nvarchar nebude vyžadovat přetažení tabulky. Žádná operace ALTER TABLE By také nebyla. Podrobnosti o omezeních při změně vlastností tabulky nebo sloupce si můžete přečíst v příkaz ALTER TABLE .

Z níže uvedené dokumentace jsem zkopíroval nejdůležitější části:

Změna velikosti sloupce

Délka, přesnost nebo měřítko sloupce můžete změnit zadáním nové velikosti pro typ dat sloupce v klauzuli ALTER COLUMN. Pokud ve sloupci existují data, nová velikost nemůže být menší než maximální velikost dat. Sloupec také nelze definovat v indexu, pokud není sloupcem datový typ varchar, nvarchar nebo varbinary a index není výsledkem omezení PRIMARY KEY. Viz příklad P.

Zámky a ALTER TABLE

Změny uvedené v ALTER TABLE jsou implementovány okamžitě. Pokud změny vyžadují úpravy řádků v tabulce, ALTER TABLE aktualizuje řádky. ALTER TABLE získá zámek modifikace schématu v tabulce, aby se ujistil, že žádná jiná spojení neodkazují ani metadata pro tabulku během změny, s výjimkou operací online indexů, které na konci vyžadují velmi krátký zámek SCH-M. Při operaci ALTER TABLE… SWITCH se zámek získá jak ve zdrojové, tak v cílové tabulce. Úpravy provedené v tabulce jsou zaznamenány a plně obnovitelné. Změny, které ovlivňují všechny řádky ve velmi velkých tabulkách, například vynechání sloupce nebo přidání sloupce NOT NULL ve výchozím nastavení, může trvat dlouho, než se dokončí a vygeneruje mnoho záznamů protokolu. Tyto příkazy ALTER TABLE by měly být prováděny se stejnou péčí jako jakýkoli příkaz INSERT, UPDATE nebo DELETE, který ovlivňuje mnoho řádků.

18
MicSim