Comment changer un attribut dans une table en utilisant T-SQL pour autoriser les nulls (pas null -> null)? Modifier la table peut-être?
Comment changer un attribut dans une table en utilisant T-SQL pour autoriser les nulls (pas null -> null)? Modifier la table peut-être?
Réponses:
-- 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)
comme il autorisera par défaut les valeurs NULL de toute façon, sauf indication contraire explicite.
ALTER TABLE .. ALTER COLUMN ..
commandes distinctes
ALTER TABLE ALTER COLUMN failed because one or more objects access this column.
Oui, vous pouvez utiliser ALTER TABLE
comme suit:
ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL
Citant de la ALTER TABLE
documentation:
NULL
peut être spécifié dansALTER COLUMN
pour forcer uneNOT NULL
colonne à autoriser les valeurs nulles, à l'exception des colonnes dans les contraintes PRIMARY KEY.
ALTER TABLE a raison:
ALTER TABLE MyCustomers ALTER COLUMN CompanyName VARCHAR(20) NULL
Pour MySQL, MariaDB
ALTER TABLE [table name] MODIFY COLUMN [column name] [data type] NULL
Utilisez MODIFY COLUMN
au lieu de ALTER COLUMN
.
ALTER TABLE public.contract_termination_requests
ALTER COLUMN management_company_id DROP NOT NULL;
J'ai écrit ceci afin que je puisse éditer toutes les tables et colonnes à null à la fois:
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
Voici l'approche pour ce faire: -
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
Si vous n'avez pas de schéma, supprimez la ligne de schéma car vous n'avez pas besoin de donner le schéma par défaut.
Donc, le moyen le plus simple est,
alter table table_name change column_name column_name int(11) NULL;