Wie ändere ich ein Attribut in einer Tabelle mit T-SQL, um Nullen zuzulassen (nicht null -> null)? Tisch vielleicht ändern?
Wie ändere ich ein Attribut in einer Tabelle mit T-SQL, um Nullen zuzulassen (nicht null -> null)? Tisch vielleicht ändern?
Antworten:
-- 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)
wie es standardmäßig sowieso Nullen zulässt, wenn nicht ausdrücklich anders angegeben.
ALTER TABLE .. ALTER COLUMN ..
Befehle ausführen
ALTER TABLE ALTER COLUMN failed because one or more objects access this column.
Ja, Sie können ALTER TABLE
Folgendes verwenden:
ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL
Zitat aus der ALTER TABLE
Dokumentation:
NULL
kann angegeben werden, umALTER COLUMN
zu erzwingen, dass eineNOT NULL
Spalte Nullwerte zulässt, mit Ausnahme von Spalten in PRIMARY KEY-Einschränkungen.
ALTER TABLE ist richtig:
ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL
Für MySQL MariaDB
ALTER TABLE [table name] MODIFY COLUMN [column name] [data type] NULL
Verwenden Sie MODIFY COLUMN
anstelle von ALTER COLUMN
.
ALTER TABLE public.contract_termination_requests
ALTER COLUMN management_company_id DROP NOT NULL;
Ich habe dies geschrieben, damit ich alle Tabellen und Spalten gleichzeitig auf null bearbeiten kann:
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
Dies ist der Ansatz, um dies zu tun:
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
Wenn Sie kein Schema haben, löschen Sie die Schemazeile, da Sie das Standardschema nicht angeben müssen.
Der einfachste Weg ist also:
alter table table_name change column_name column_name int(11) NULL;