Je connais la syntaxe:
ALTER TABLE [TheTable] DROP CONSTRAINT [TheDefaultConstraint]
mais comment supprimer la contrainte par défaut quand je ne connais pas son nom? (Autrement dit, il a été généré automatiquement à CREATE TABLE
temps.)
Je connais la syntaxe:
ALTER TABLE [TheTable] DROP CONSTRAINT [TheDefaultConstraint]
mais comment supprimer la contrainte par défaut quand je ne connais pas son nom? (Autrement dit, il a été généré automatiquement à CREATE TABLE
temps.)
Vous pouvez utiliser ce code pour le faire automatiquement:
DECLARE @tableName VARCHAR(MAX) = '<MYTABLENAME>'
DECLARE @columnName VARCHAR(MAX) = '<MYCOLUMNAME>'
DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name
FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID(@tableName)
AND PARENT_COLUMN_ID = (
SELECT column_id FROM sys.columns
WHERE NAME = @columnName AND object_id = OBJECT_ID(@tableName))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE '+@tableName+' DROP CONSTRAINT ' + @ConstraintName)
Il suffit de remplacer <MYTABLENAME>
et <MYCOLUMNNAME>
selon le cas.
Si vous voulez le faire manuellement, vous pouvez utiliser la Gestion de Studio pour le trouver (sous les Contraintes nœud à l'intérieur de la table).
Faire à l'aide de SQL:
Si les contraintes sont contraintes par défaut, vous pouvez utiliser sys.default_constraints
trouver:
SELECT OBJECT_NAME(parent_object_id) AS TableName, name AS ConstraintName
FROM sys.default_constraints ORDER BY TableName, ConstraintName
Si vous cherchez d'autres contraintes (chèque, unique, clé étrangère, par défaut, la clé primaire), vous pouvez utiliser sysconstraints
:
SELECT OBJECT_NAME(id) AS TableName, OBJECT_NAME(constid) AS ConstraintName
FROM sysconstraints ORDER BY TableName, ConstraintName
Vous ne dites pas quelle version de SQL Server que vous utilisez. Le travail ci-dessus sur SQL 2005 et SQL 2008.
Pour une seule table et une seule colonne sur une seule ligne, utilisez ce qui suit:
declare @sql nvarchar(max); set @sql = ''; SELECT @sql+='ALTER TABLE [dbo].[YOURTABLENAME] DROP CONSTRAINT ' + ((SELECT OBJECT_NAME(constid) FROM sysconstraints WHERE OBJECT_NAME(id) = 'YOURTABLENAME'AND colid IN (SELECT ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS Where Table_Name = 'YOURTABLENAME' and COLUMN_NAME = 'YOURCOLUMNNAM'))) + ';'; EXEC sp_executesql @sql;
Si vous avez plusieurs contraintes sur la colonne, vous devrez faire la distinction entre la contrainte que vous recherchez, mais si vous avez juste une contrainte par défaut, cela fera l'affaire.
Consultez les autres colonnes disponibles dans information_schema pour vous permettre de mieux distinguer.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.