Jak zmienić typ danych kolumny w SQL Server?

Odpowiedzi:

564
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

EDYCJA Jak wspomniano NULL / NOT NULL powinien był zostać określony, patrz również odpowiedź Roba .

cmsjr
źródło
1
Dlaczego warto to określić? Jaka jest korzyść? Chyba wszystko, co chcę odejść, nie muszę o tym wspominać.
Niesamowity
5
@TheincredibleJan To byłoby fajne, ale niestety tak nie działa. Jeśli wydasz ALTER TABLE TableName ALTER COLUMN ColumnNamepolecenie zmiany istniejącej kolumny [NOT NULL]i nie określisz jej wprost, nastąpi to [NULL]później, ponieważ jest to ustawienie domyślne.
takrl
4
Działa to tylko wtedy, gdy nie masz ograniczeń i indeksów w tej kolumnie, w przeciwnym razie musisz upuścić wszystko i odtworzyć to, co jest żmudne i męczące, szczególnie jeśli masz wiele obcych odniesień w tej kolumnie. np. przy zmianie z tinyint na int.
Hrvoje Batrnek
Ostrożnie, jeśli masz otwarte IDE (jak SSMS). Nawet gdy moja karta Projektanta była zamknięta w tabeli, zmieniałem (po uruchomieniu skryptu i kliknięciu tabeli prawym przyciskiem myszy, aby wybrać „Projekt”), nadal pokazywałem stare typy danych! Dopiero po zamknięciu WSZYSTKICH moich kart w Management Studio i ponownym otwarciu widoku projektu w końcu pokazał zaktualizowany typ danych. Bardzo przerażające, więc bądź ostrożny (może to być naprawiony błąd pamięci podręcznej lub jedno państwo członkowskie nigdy nie zadaje sobie trudu, aby je naprawić). Dla tych, którzy zastanawiają się, dlaczego uruchomiłem T-SQL, gdy korzystam z Design-View, chciałem zmienić moje typy danych na SysName(na które nie pozwala SSMS).
MikeTeeVee,
Nie miałem szczęścia z tymi poleceniami w XAMPP. ALTER TABLE table MODIFY COLUMN column datatypepracował dla mnie.
Pavindu
173

Nie zapomnij o zerowalności.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Rob Garrison
źródło
2
Co się dzieje z zerowalnością? Jeśli nie chcę tego zmieniać - jaka jest korzyść z ponownego ustawienia?
Niesamowity
7
^ Domyślnie NULL po zakończeniu wykonywania instrukcji alter table bez wyraźnego zdefiniowania, co powinno być.
sc305495,
1
@ sc305495 ​​Mówiąc dokładniej, domyślnie będzie to, gdziekolwiek są ustawienia ANSI_NULL_DEFAULT.
Zikato,
23

Użyj instrukcji Alter table.

Alter table TableName Alter Column ColumnName nvarchar(100)
John Sansom
źródło
13

Składnia do modyfikowania kolumny w istniejącej tabeli w SQL Server (Transact-SQL) to:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Na przykład:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

W tym ALTER TABLEprzykładzie programu SQL Server zmodyfikowano kolumnę nazywaną last_nametypem danych VARCHAR(75)i wymusiono, aby kolumna nie zezwalała na wartości null.

patrz tutaj

Yogesh Bende
źródło
1
dodaj więcej informacji do swojej odpowiedzi i sformatuj kod / zapytanie!
Sebastian Brosch,
4

Dopóki zwiększasz rozmiar swojego varchara, nic ci nie jest. Zgodnie z tabelą Alter odniesieniem do :

Zmniejszenie precyzji lub skali kolumny może spowodować obcięcie danych.

Jocassid
źródło
3

Do zmiany typu danych

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

Do zmiany klucza podstawowego

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Alexander Zaldostanov
źródło
1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Muhammad Omair
źródło
Wydaje się, że to nic nie dodaje do istniejącej zaakceptowanej odpowiedzi sprzed lat, a także zmiany, które opublikowałeś w strukturze tabeli, w rzeczywistości nie pasują do pytania.
PeterJ
-11

Spróbuj tego:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";
Kai Tzer
źródło
1
„Modyfikuj” oczywiście nie jest poprawne. Porównaj z innymi odpowiedziami.
Frank
3
To jest stare, ale wygląda na to, że Kai Tzer dowodził MySql i / lub Oracle DDL.
Sheldon Cohen
1
Zgadzam się z Sheldonem, odpowiedzi tutaj nie pomogły mi z wyrocznią sql, tylko to
AsfK