Come modificare un attributo in una tabella usando T-SQL per consentire null (non null -> null)? Modificare la tabella forse?
Come modificare un attributo in una tabella usando T-SQL per consentire null (non null -> null)? Modificare la tabella forse?
Risposte:
-- 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)
come sarà predefinito per consentire comunque i null se non diversamente specificato esplicitamente.
ALTER TABLE .. ALTER COLUMN ..
comandi separati
ALTER TABLE ALTER COLUMN failed because one or more objects access this column.
Sì, puoi usare ALTER TABLE
come segue:
ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL
Citando dalla ALTER TABLE
documentazione:
NULL
può essere specificatoALTER COLUMN
per forzare unaNOT NULL
colonna a consentire valori null, ad eccezione delle colonne nei vincoli PRIMARY KEY.
ALTER TABLE ha ragione:
ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL
Per MySQL, MariaDB
ALTER TABLE [table name] MODIFY COLUMN [column name] [data type] NULL
Usa MODIFY COLUMN
invece di ALTER COLUMN
.
ALTER TABLE public.contract_termination_requests
ALTER COLUMN management_company_id DROP NOT NULL;
Ho scritto questo in modo da poter modificare tutte le tabelle e le colonne su null in una sola volta:
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
Questo è l'approccio per fare questo: -
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
Se non si dispone di uno schema, eliminare la riga dello schema perché non è necessario fornire lo schema predefinito.
Quindi il modo più semplice è
alter table table_name change column_name column_name int(11) NULL;