SQL Server 2005 -Tablename의 쿼리를 기반으로 테이블에서 클러스터 된 키를 제거하는 SQL 문?

StackOverflow https://stackoverflow.com/questions/1222432

문제

Microsoft Dynamics Nav 데이터베이스의 백업을 복원하려고합니다. 불행히도 이미 클러스터 된 키가있는 테이블의 클러스터 키를 설정하려고 시도하면 실패합니다.

NAV에서 데이터베이스의 모든 회사는 자체 테이블 사본을받습니다. COMPANY$User_Setup. 따라서 주어진 회사에서 클러스터 된 키를 제거하고 싶습니다. 이는 이름이 'Company $'로 시작하는 모든 테이블을 의미합니다.

이것을 수행 할 수있는 SQL 문을 가지고 있습니까?

미리 감사드립니다!

안부, 마틴

도움이 되었습니까?

해결책

커서로해야합니다. 각 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가 TableName을 기반으로 명명되지 않은 경우 SYSCOSSTRAINTS 또는 SYSINDEXES를 기반으로 쿼리를 위해이를 수정하여 실제 PK 이름을 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top