SKI*_*DER 20 sql database sql-server-2005 unique-constraint non-clustered-index
我有一个表'users','login'列定义为:
[login] VARCHAR(50) UNIQUE NOT NULL
Run Code Online (Sandbox Code Playgroud)
现在我想使用SQL脚本删除这个唯一的约束/索引.我在我的本地数据库中找到了它的名字UQ_ users _7D78A4E7,但我想它在另一个数据库上有一个不同的名字.
放弃这种独特约束的最佳方法是什么?或至少任何......
谢谢.
Ava*_*esh 32
ALTER TABLE users
DROP CONSTRAINT 'constraints_name'
Run Code Online (Sandbox Code Playgroud)
小智 22
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)
Run Code Online (Sandbox Code Playgroud)
这主要起作用.
drop index IX_dbo_YourTableName__YourColumnName on dbo.YourTableName
GO
Run Code Online (Sandbox Code Playgroud)
小智 6
要删除UNIQUE约束,您不需要约束的名称,只需要包含在约束中的列的列表.
语法是:
ALTER TABLE table_name DROP UNIQUE (column1, column2, . . . )
Run Code Online (Sandbox Code Playgroud)