SQL Server 2005 - SQL-Anweisung zu gruppierten Schlüssel aus Tabellen entfernen basierend auf einer Abfrage auf Tabellennamen?

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

Frage

Ich versuche, eine Sicherung einer Microsoft Dynamics NAV-Datenbank wiederherstellen, die leider nicht, da es eine CLUSTERED KEY für die Tabellen zu setzen versucht, die Schlüssel bereits gruppierte.

In NAV, jedes Unternehmen in der Datenbank erhält eine eigene Kopie der Tabellen mit dem Präfix der Namen der Firma, zum Beispiel COMPANY$User_Setup. Ich würde daher gerne jeden gruppierte Schlüssel zu einem bestimmten Unternehmen zu entfernen, die auf einer Tabelle bedeutet beginnt, dessen Name mit ‚Firma $‘.

Hat jemand bekam eine SQL-Anweisung, die diese durchführen könnte?

Vielen Dank im Voraus!

Mit freundlichen Grüßen, Martin

War es hilfreich?

Lösung

Sie müssen es als Cursor tun. Unter der Annahme, jeder PK Constraint consistantly benannt und basiert auf dem Tabellennamen, würden Sie in der Lage sein, etwas zu tun, wie (nicht getestet, so kann Tippfehler oder vauge Syntaxfehler enthalten):

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

Wenn sie Ihre PK nicht auf Tabellennamen basieren nennen, dann werden Sie haben, dies zu ändern, auch auf sysconstraints oder sysindexes basierend abzufragen, um die tatsächlichen PK-Namen zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top