我有一个表'users','login'列定义为:
[login] VARCHAR(50) UNIQUE NOT NULL
现在我想使用SQL脚本删除这个唯一约束/索引。我在我的本地数据库中找到了它的名字 UQ_ users _7D78A4E7 ,但我想它在另一个数据库上有不同的名称。
删除此唯一约束的最佳方法是什么?或至少任何......
感谢。
答案 0 :(得分:33)
ALTER TABLE users
DROP CONSTRAINT 'constraints_name'
答案 1 :(得分:21)
SKINDER,您的代码不使用列名。正确的脚本是:
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)
答案 2 :(得分:7)
这主要适用。
drop index IX_dbo_YourTableName__YourColumnName on dbo.YourTableName
GO
答案 3 :(得分:7)
要删除UNIQUE约束,您不需要约束的名称,只需要 约束中包含的列列表。
语法为:
ALTER TABLE table_name DROP UNIQUE (column1, column2, . . . )
答案 4 :(得分:3)
使用此SQL命令删除唯一约束:
ALTER TABLE tbl_name
DROP INDEX column_name
答案 5 :(得分:1)
您可以使用以下脚本:
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
答案 6 :(得分:1)
此声明适合我
ALTER TABLE table_name DROP UNIQUE (column_name);
答案 7 :(得分:0)
我已经停止了下面的脚本(因为我在此表中只有一个非群集唯一索引):
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)
有人评论此解决方案是否可以接受?有什么优点和缺点?
感谢。
答案 8 :(得分:0)
如果您知道约束的名称,那么您可以直接使用
之类的命令alter table users drop constraint constraint_name;
如果您不知道约束名称,可以使用此命令
来获取约束选择constraint_name,constraint_type 来自user_constraints table_name ='您的表名称';
答案 9 :(得分:0)
展开到数据库名称>>扩展到表>>扩展到键>>复制密钥的名称,然后执行以下命令:
ALTER TABLE Test DROP UQ__test__3213E83EB607700F;
此处 UQ__test__3213E83EB607700F 是在测试表的特定列上创建的唯一键的名称。
答案 10 :(得分:0)
我想提一个上一个问题,因为我遇到了同样的问题,并由solution解决了。
首先,约束总是在其名称中使用Hash
值构建。所以问题是HASH
在不同的机器或数据库中有所不同。例如DF__Companies__IsGlo__6AB17FE4
此处6AB17FE4
是哈希值(8位)。所以我指的是一个对所有
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
它将删除您的默认约束。但是,如果你想再次创建它,你可以试试这个
ALTER TABLE [dbo].[ProcedureAlerts] ADD DEFAULT((0)) FOR [EmailSent]
最后,只需运行DROP
命令即可删除该列。
答案 11 :(得分:0)
我有同样的问题。我正在使用DB2。我所做的是有点不太专业的解决方案,但是它可以在每个DBMS中使用:
ALTER TABLE USERS ADD COLUMN LOGIN_OLD VARCHAR(50) NOT NULL DEFAULT '';
UPDATE USERS SET LOGIN_OLD=LOGIN;
ALTER TABLE USERS DROP COLUMN LOGIN;
ALTER TABLE USERS RENAME COLUMN LOGIN_OLD TO LOGIN;
CALL SYSPROC.ADMIN_CMD('REORG TABLE USERS');
ALTER命令的语法在其他DBMS中可能不同
答案 12 :(得分:0)
FOR SQL删除约束
ALTER TABLE [dbo]。[tablename] DROP CONSTRAINT [由sql创建的唯一键] 开始
或者: 转到键-右键单击唯一键,然后在新的sql编辑器窗口中单击放置约束。 该程序为您编写代码。
希望这会有所帮助。 消失。
答案 13 :(得分:0)
在任何数据库上查找所有系统生成的唯一约束名称以及与之相关的其他信息。
您可以使用以下查询,并根据需要对其进行增强:
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE CONSTRAINT_NAME LIKE '%UQ%'
最终查询通过数据库删除所有唯一约束。您可以添加where子句以将其限制为一个表:
DECLARE @uqQuery NVARCHAR(MAX)
SET @uqQuery = SUBSTRING( (SELECT '; ' + 'ALTER TABLE [' + Table_Schema+'].['+Table_Name
+'] DROP CONSTRAINT ['+CONSTRAINT_NAME+']'
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE CONSTRAINT_NAME LIKE '%UQ%'
FOR XML PATH('')), 2, 2000000)
SELECT @uqQuery
答案 14 :(得分:0)
ALTER TABLE dbo.table
DROP CONSTRAINT uq_testConstrain
约束名称uq_testConstrain
可以在database-> table-> keys文件夹下找到
答案 15 :(得分:0)
对于 MSSQL 使用以下代码
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu WHERE TABLE_NAME = 'tableName' and COLUMN_NAME = 'colName')
BEGIN
Declare @con varchar(50);
Declare @sqlStatement varchar(500);
select @con = CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu WHERE TABLE_NAME = 'tableName' and COLUMN_NAME = 'colName'
SET @sqlStatement = 'ALTER TABLE tableName DROP CONSTRAINT ' + @con;
EXECUTE (@sqlStatement)
END
GO