nonclustered indexes index ejemplo drop create clustered sql database sql-server-2005 unique-constraint non-clustered-index

indexes - unique clustered index in sql server



¿Cómo eliminar una restricción única de la columna de la tabla? (11)

Tengo una tabla de ''usuarios'' con la columna ''inicio de sesión'' definida como:

[login] VARCHAR(50) UNIQUE NOT NULL

Ahora quiero eliminar esta restricción / índice único usando un script SQL. Encontré su nombre UQ_ usuarios _7D78A4E7 en mi base de datos local, pero supongo que tiene un nombre diferente en otra base de datos.

¿Cuál es la mejor manera de eliminar esta restricción única? O al menos cualquier ...

Gracias.


Esta afirmación funciona para mí

ALTER TABLE table_name DROP UNIQUE (column_name);


Esto funciona principalmente.

drop index IX_dbo_YourTableName__YourColumnName on dbo.YourTableName GO


Expanda al nombre de la base de datos >> expanda a la tabla >> expanda a las teclas >> copie el nombre de la clave y luego ejecute el siguiente comando:

ALTER TABLE Test DROP UQ__test__3213E83EB607700F;

Aquí UQ__test__3213E83EB607700F es el nombre de la clave única que se creó en una columna particular en la tabla de prueba.


Me detuve en el script como se muestra a continuación (ya que solo tengo un índice único no agrupado en esta tabla):

declare @table_name nvarchar(256) declare @col_name nvarchar(256) declare @Command nvarchar(1000) set @table_name = N''users'' set @col_name = N''login'' select @Command = ''ALTER TABLE '' + @table_name + '' drop constraint '' + d.name from sys.tables t join sys.indexes d on d.object_id = t.object_id where t.name = @table_name and d.type=2 and d.is_unique=1 --print @Command execute (@Command)

¿Alguien ha comentado si esta solución es aceptable? Cualquier pros y contras?

Gracias.


Me gustaría referir una pregunta anterior, porque me enfrenté al mismo problema y me resolví con esta solution . En primer lugar, una restricción siempre se crea con un valor Hash en su nombre. Así que el problema es que este HASH varía según la máquina o la base de datos. Por ejemplo, DF__Companies__IsGlo__6AB17FE4 aquí 6AB17FE4 es el valor de hash (8 bits). Así que me refiero a un solo guión que será fructífero para todos.

DECLARE @Command NVARCHAR(MAX) declare @table_name nvarchar(256) declare @col_name nvarchar(256) set @table_name = N''ProcedureAlerts'' set @col_name = N''EmailSent'' select @Command =''Alter Table dbo.ProcedureAlerts Drop Constraint ['' + ( select d.name from sys.tables t join sys.default_constraints d on d.parent_object_id = t.object_id join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id where t.name = @table_name and c.name = @col_name) + '']'' --print @Command exec sp_executesql @Command

Se eliminará su restricción predeterminada. Sin embargo, si desea crearlo de nuevo, simplemente intente esto

ALTER TABLE [dbo].[ProcedureAlerts] ADD DEFAULT((0)) FOR [EmailSent]

Finalmente, simplemente ejecute un comando DROP para eliminar la columna.


Para eliminar una restricción ÚNICA, no necesita el nombre de la restricción, solo la lista de columnas que se incluyen en la restricción.

La sintaxis sería:

ALTER TABLE table_name DROP UNIQUE (column1, column2, . . . )


Puedes usar el siguiente script:

Declare @Cons_Name NVARCHAR(100) Declare @Str NVARCHAR(500) SELECT @Cons_Name=name FROM sys.objects WHERE type=''UQ'' AND OBJECT_NAME(parent_object_id) = N''TableName''; ---- Delete the unique constraint. SET @Str=''ALTER TABLE TableName DROP CONSTRAINT '' + @Cons_Name; Exec (@Str) GO


SKINDER, su código no usa nombre de columna. El script correcto es:

declare @table_name nvarchar(256) declare @col_name nvarchar(256) declare @Command nvarchar(1000) set @table_name = N''users'' set @col_name = N''login'' select @Command = ''ALTER TABLE '' + @table_name + '' drop constraint '' + d.name from sys.tables t join sys.indexes d on d.object_id = t.object_id and d.type=2 and d.is_unique=1 join sys.index_columns ic on d.index_id=ic.index_id and ic.object_id=t.object_id join sys.columns c on ic.column_id = c.column_id and c.object_id=t.object_id where t.name = @table_name and c.name=@col_name print @Command --execute (@Command)


Si conoce el nombre de su restricción, puede usar directamente el comando como

alterar los usuarios de la tabla soltar la restricción nombre_constricción;

Si no conoce el nombre de la restricción, puede obtener la restricción utilizando este comando

seleccione el nombre de la restricción, el tipo de restricción de user_constraints donde table_name = ''YOUR TABLE NAME'';


Utilice este comando SQL para eliminar una restricción única:

ALTER TABLE tbl_name DROP INDEX column_name


ALTER TABLE users DROP CONSTRAINT ''constraints_name''