我想,因为它试图设置其已经聚集键的表一个聚集键还原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名称也查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top