Jak zmienić jeden atrybut w tabeli za pomocą T-SQL, aby zezwolić na wartości null (nie null -> null)? Może zmienisz stół?
Jak zmienić jeden atrybut w tabeli za pomocą T-SQL, aby zezwolić na wartości null (nie null -> null)? Może zmienisz stół?
Odpowiedzi:
-- replace NVARCHAR(42) with the actual type of your column
ALTER TABLE your_table
ALTER COLUMN your_column NVARCHAR(42) NULL
ALTER TABLE your_table ALTER COLUMN your_column NVARCHAR(42)
jak domyślnie zezwala na null, jeśli nie zostanie wyraźnie określone inaczej.
ALTER TABLE .. ALTER COLUMN ..
polecenia
ALTER TABLE ALTER COLUMN failed because one or more objects access this column.
Tak, możesz użyć ALTER TABLE
w następujący sposób:
ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL
Cytowanie z ALTER TABLE
dokumentacji:
NULL
można określić w,ALTER COLUMN
aby wymusić naNOT NULL
kolumnie dopuszczenie wartości zerowych, z wyjątkiem kolumn w ograniczeniach KLUCZ PODSTAWOWY.
ALTER TABLE ma rację:
ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL
Dla MySQL, MariaDB
ALTER TABLE [table name] MODIFY COLUMN [column name] [data type] NULL
Użyj MODIFY COLUMN
zamiast ALTER COLUMN
.
ALTER TABLE public.contract_termination_requests
ALTER COLUMN management_company_id DROP NOT NULL;
Napisałem to, aby móc edytować wszystkie tabele i kolumny jednocześnie do wartości null:
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
Oto podejście do tego: -
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
Jeśli nie masz żadnego schematu, usuń linię schematu, ponieważ nie musisz podawać schematu domyślnego.
Więc najprostszym sposobem jest
alter table table_name change column_name column_name int(11) NULL;