ALTER INDEX ist aufgrund von QUOTED_IDENTIFIER beim Ausführen von sp_msForEachTable fehlgeschlagen

7

Wenn ich versuche, einen Index für eine Tabelle neu zu erstellen:

%Vor%

das funktioniert gut.

Aber wenn ich anrufe

%Vor%

Ich erreiche dieselbe Tabelle und schieße mit:

  

Mitteilung 1934, Ebene 16, Staat 1, Linie 2
  ALTER INDEX ist fehlgeschlagen, da die folgenden SET-Optionen falsche Einstellungen aufweisen: 'QUOTED_IDENTIFIER'. Überprüfen Sie, ob die SET-Optionen für die Verwendung mit indizierten Sichten und / oder Indizes für berechnete Spalten und / oder gefilterte Indizes und / oder Abfragebenachrichtigungen und / oder XML-Datentypmethoden und / oder räumliche Indexoperationen geeignet sind.

Und um zu bestätigen, dass es die gleiche Tabelle ist:

%Vor%

was zu den Ergebnissen führt:

%Vor%

Was mache ich nicht falsch?

Hinweis :

%Vor%

funktioniert gut!

    
Ian Boyd 01.10.2012, 13:53
quelle

3 Antworten

19

Angegebene Bezeichnereinstellungen werden für jede gespeicherte Prozedur gespeichert, und sp_MSforeachtable hat sie als OFF definiert. Sie können dies jedoch umgehen, indem Sie es auf ON setzen, bevor es den Neuindex ausführt:

%Vor%

SET QUOTED_IDENTIFIER :

  

Wenn eine gespeicherte Prozedur erstellt wird, werden die Einstellungen SET QUOTED_IDENTIFIER und SET ANSI_NULLS erfasst und für nachfolgende Aufrufe dieser gespeicherten Prozedur verwendet.

Und natürlich fügen Sie die üblichen Vorbehalte für sp_MSforeachtable ein, die undokumentiert sind, und Sie können sich daher nicht darauf verlassen, dass irgendein Verhalten stabil ist.

Für DBCC DBREINDEX - alle Wetten sind deaktiviert. DBCC lebt in seiner eigenen kleinen, sehr angepassten Codewelt. Aber auch für die zukünftige Arbeit sollte man sich nicht darauf verlassen:

  

Diese Funktion wird in einer zukünftigen Version von Microsoft SQL Server entfernt. Verwenden Sie diese Funktion nicht in neuen Entwicklungsarbeiten und ändern Sie Anwendungen, die diese Funktion derzeit verwenden, so schnell wie möglich. Verwenden Sie stattdessen ALTER INDEX .

    
Damien_The_Unbeliever 01.10.2012, 14:01
quelle
3

Sie benötigen SET QUOTED_IDENTIFIER ON auch in sp_msForEachTable , weil sp_msForEachTable nicht die richtige Einstellung hat.

%Vor%     
RichardTheKiwi 01.10.2012 13:57
quelle
1

Verwenden Sie nicht sp_msforeachtable. Es wurde dokumentiert, Objekte zu vermissen. Sie würden viel besser durch eine Liste von Tabellen mit sys.tables iterieren.

%Vor%

Zum Beispiel:

%Vor%     
Nic 01.10.2012 23:16
quelle