Tabloyu değiştir: 'Nulls'a İzin Ver' özniteliğinin null değerine izin vermek için null değerinden değiştirilmesi


207

Null'lara (null değil> null değil) izin vermek için T-SQL kullanarak bir tablodaki bir özniteliği nasıl değiştirebilirim? Tabloyu değiştirmek belki?


12
SQL Server Management Studio böyle basit bir görev için çok karmaşık bir komut dosyası oluşturur. Bu yüzden kafam karıştı ve yığın akışını kontrol ettim. Belki de sorunun noktası budur ...
Tillito

Yanıtlar:


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

4
Ya da ALTER TABLE your_table ALTER COLUMN your_column NVARCHAR(42)açıkça aksi belirtilmedikçe null değerlerine izin vermenin varsayılanı olduğu gibi.
Martin Smith

3
Null ALTER TABLE .. ALTER COLUMN ..
değerine

2
Bunun işe yaramayabileceği bazı durumlar olduğuna dikkat edin - eğer alırsanız bu DBA Stack Exchange yanıtına bakınALTER TABLE ALTER COLUMN failed because one or more objects access this column.
Jarrod Dixon

49

Evet ALTER TABLEaşağıdaki gibi kullanabilirsiniz :

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

ALTER TABLEBelgelerden alıntı :

NULLALTER COLUMNbir NOT NULLsütunu PRIMARY KEY kısıtlamalarındaki sütunlar dışında null değerlere izin vermeye zorlamak için belirtilebilir .


22

ALTER TABLE doğru:

ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL

2
Kısıtlamaları ve yalnızca veri türünü yeniden tanımlamanız gerektiğinden emin misiniz? MSDN makalesinde kısıtlamaların yeniden tanımlanması gerektiği belirtilmez: "ALTER COLUMN ile NULL veya NOT NULL belirtilirse, new_data_type [(duyarlık [, ölçek])] da belirtilmelidir. ölçek değiştirilmezse, geçerli sütun değerlerini belirtin. "
Daniel Vassallo

@Daniel Vassallo - Haklısın. Tam olmaya çalışıyordum, ancak NULL / NOT NULL değiştirmenin tek değişiklik olması gerekiyordu.
Oded

5

MySQL, MariaDB için

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

Yerine MODIFY COLUMNkullanın ALTER COLUMN.


4
ALTER TABLE public.contract_termination_requests
ALTER COLUMN management_company_id DROP NOT NULL;

2
@ ÁronLőrincz soru Postgres ile ilgili değil. SQL Server olarak etiketlenir, bu nedenle bu cevap yanlıştır.
Martin Smith

Haklısın, ama yine de bana yardımcı oldu ve bence bu soruyu Google aracılığıyla bulan insanlar için yararlı bir yorum. Sorunun başlığı, hangi veritabanı sunucusuyla ilgili olduğunu netleştirmiyor.
Aron Lorincz

1

Tüm tabloları ve sütunları bir kerede null olarak düzenleyebilmem için bunu yazdım:

select 
case
when sc.max_length = '-1' and st.name in ('char','decimal','nvarchar','varchar')
then
'alter table  [' + so.name + '] alter column [' + sc.name + '] ' + st.name + '(MAX) NULL'
when st.name in ('char','decimal','nvarchar','varchar')
then
'alter table  [' + so.name + '] alter column [' + sc.name + '] ' + st.name + '(' + cast(sc.max_length as varchar(4)) + ') NULL'
else
'alter table  [' + so.name + '] alter column [' + sc.name + '] ' + st.name + ' NULL'
end as query
from sys.columns sc
inner join sys.types st on st.system_type_id = sc.system_type_id
inner join sys.objects so on so.object_id = sc.object_id
where so.type = 'U'
and st.name <> 'timestamp'
order by st.name

1

Bunu yapmak için yaklaşım: -

  1. Tablonun veya sütunun var olup olmadığını kontrol edin.
  2. Evetse, sütunu değiştirin. Örneğin:-
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE 
            TABLE_CATALOG = 'DBName' AND 
            TABLE_SCHEMA = 'SchemaName' AND
            TABLE_NAME = 'TableName' AND
            COLUMN_NAME = 'ColumnName')
BEGIN
    ALTER TABLE DBName.SchemaName.TableName ALTER COLUMN ColumnName [data type] NULL
END  

Herhangi bir şemanız yoksa, varsayılan şemayı vermeniz gerekmediğinden şema satırını silin .


0

Yani en basit yol,

alter table table_name change column_name column_name int(11) NULL;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.