1

我正在尝试恢复 Microsoft Dynamics NAV 数据库的备份,但不幸的是,它失败了,因为它尝试为已经具有集群键的表设置集群键。

在 NAV 中,数据库中的每家公司都有自己的表格副本,并以公司名称为前缀,例如COMPANY$User_Setup. 因此,我想删除给定公司上的任何聚集键,这意味着在任何名称以“Company $”开头的表上。

有没有人有可以执行此操作的 SQL 语句?

4

1 回答 1

1

您需要将其作为光标进行。假设每个 PK 约束的命名一致并且基于表名,您可以执行以下操作(未经测试,因此可能包含拼写错误或 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 名称。

于 2009-08-03T14:00:08.710 回答