SQL Server 2005中 - SQL语句删除基于表名查询从表聚集键?
-
10-07-2019 - |
题
我想,因为它试图设置其已经聚集键的表一个聚集键还原Microsoft Dynamics NAV的数据库,其中不幸失败的备份。
在NAV,每家公司都在数据库中获取自己的表的副本,与本公司的名称,例如前缀COMPANY$User_Setup
。因此,我想删除一个给定的公司,这意味着任何表其名称的任何集群键以“公司$”。
有没有人得到了可以执行这个SQL语句?
提前感谢!
此致 马丁
解决方案
您需要做的光标。假设每个PK约束consistantly命名,是基于表名,你可以这样做(未经测试,因此可能包含错别字或vauge语法错误):
DECLARE mycursor CURSOR FOR SELECT name FROM sysobjects WHERE name LIKE 'Company$%'
OPEN CURSOR
FETCH NEXT FROM mycursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'ALTER TABLE QUOTENAME(' + @tablename + ') DROP CONSTRAINT PK_' + @tablename
EXEC sp_ExecuteSQL @sql
FETCH NEXT FROM mycursor INTO @tablename
END
CLOSE CURSOR
DEALLOCATE CURSOR
如果你PK的未命名基于表名,那么你就必须修改此基础上sysconstraints中或sysindexes中获得实际的PK名称也查询。
不隶属于 StackOverflow