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 TABLEcomme suit:
ALTER TABLE [table name] ALTER COLUMN [column name] [data type] NULL
Citant de la ALTER TABLEdocumentation:
NULLpeut être spécifié dansALTER COLUMNpour forcer uneNOT NULLcolonne à 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 COLUMNau 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;