2010-10-08 9 views
142

Jak zmienić jeden atrybut w tabeli przy użyciu języka T-SQL, aby zezwolić na wartości null (bez wartości null -> null)? Może stół Alter?Zmodyfikuj tabelę: Jak zmienić atrybut "Zezwalaj na wartości null" z wartości null, aby zezwolić na wartość null

+9

SQL Server Management Studio tworzy bardzo skomplikowany scenariusz takim prostym zadaniem. Właśnie dlatego zostałem zdezorientowany i sprawdziłem stackoverflow. Może to jest sedno pytania ... – Tillito

Odpowiedz

256
-- replace NVARCHAR(42) with the actual type of your column 
ALTER TABLE your_table 
ALTER COLUMN your_column NVARCHAR(42) NULL 
+2

Lub po prostu ALTER TABLE your_table ALTER COLUMN twoja kolumna NVARCHAR (42) 'jak to będzie domyślnie dopuszczanie wartości null w każdym razie, jeśli nie jest określony wyraźnie inaczej. –

+0

Pamiętaj, że jeśli chcesz zmienić wiele kolumn, aby zezwolić na wartość null, musisz wykonać osobne komendy 'ALTER TABLE .. ALTER COLUMN ..' .. – sonyisda1

+1

Pamiętaj, że są przypadki, w których to może nie działać - patrz [ta odpowiedź wymiany stosów DBA] (https://dba.stackexchange.com/a/27293/158) jeśli otrzymujesz komunikat "ALTER TABLE ALTER COLUMN", ponieważ jeden lub więcej obiektów uzyskało dostęp do tej kolumny. –

20

ALTER TABLE ma rację:

ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL 
+2

Czy na pewno chcesz ponownie zdefiniować ograniczenia i tylko typ danych? [Artykuł MSDN] (http://msdn.microsoft.com/en-us/library/ms190273.aspx) nie wspomina o tym, że ograniczenia powinny zostać ponownie zdefiniowane: "Jeśli NULL lub NOT NULL jest określona z ALTER COLUMN, new_data_type [(precision [, scale])] musi być również określony .Jeśli typ danych, precyzja i skala nie zostaną zmienione, podaj bieżące wartości kolumn. " –

+0

@ Daniel Vassallo - Masz rację. Próbowałem być kompletny, ale zmiana NULL/NOT NULL powinna być jedyną zmianą. – Oded

37

Tak można użyć ALTER TABLE następująco:

ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL 

Cytując z dokumentacji ALTER TABLE:

NULL może być określony w ALTER COLUMN zmusić a NOT NULL kolumna zezwalająca na wartości puste, z wyjątkiem kolumn w OGRANICZONYCH KLUCZACH GŁÓWNYCH.

2
ALTER TABLE public.contract_termination_requests 
ALTER COLUMN management_company_id DROP NOT NULL; 
+1

To jest odpowiedź, która zadziałała na mnie w PostgreSQL. –

+1

@ ÁronLőrincz pytanie nie dotyczy jednak Postgres. Jest oznaczony SQL Server, więc ta odpowiedź jest niepoprawna. –

+0

Masz rację, ale to mi pomogło i uważam, że jest to przydatny komentarz dla osób, które znajdują to pytanie za pośrednictwem Google. Tytuł pytania nie wyjaśnia, o jaki serwer bazy danych chodzi. –

-1

można użyć

ALTER TABLE table_name ALTER COLUMN column-name DROP NOT NULL; 
Powiązane problemy