Ich bin in einem ziemlich seltsamen Problem mit SQL Server 2005 stecken, die
wirft"QUOTED IDENTIFIER EINSTELLEN sollte beim Einfügen des Datensatzes"
aktiviert sein
(Verwendung als SP) für die bestimmte Tabelle. Dies funktionierte früher gut, aber wirft diesen Fehler zufällig.
Ich habe den SP verifiziert. Wir haben die Einstellungen für SET QUOTED IDENTIFIER nicht manuell eingegeben, daher muss es standardmäßig aktiviert sein.
Kann jemand klären, was das Problem sein könnte?
Die Tabelle muss mit SET QUOTED IDENTIFIER ON rechts erstellt werden? Ich habe das Tabellenskript noch nicht überprüft.
Ich habe festgestellt, dass dieses Problem nur bei den SPs auftritt, die eine Datumsspalte einfügen oder aktualisieren (modifiedAt) ... Ein Beispielwert ist '2009-08-10 06: 43: 59: 447' ..
Gibt es ein Problem mit den übergebenen Werten?
Schreiben Sie den gespeicherten Prozess, sichern / ändern Sie die SET-Optionen, führen Sie den ALTER PROC aus, um sicherzustellen, dass SET QUOTED IDENTIFIER ON gesetzt ist.
Warum?
Die Einstellung von "QUOTED IDENTIFIER EINSTELLEN" ist zur Erstellungszeit für gespeicherte Prozeduren definiert und für Tabellen immer "EIN". Quelle, BOL .
Wenn eine Tabelle erstellt wird, wird QUOTED angezeigt IDENTIFIER-Option wird immer als gespeichert ON in den Metadaten der Tabelle auch wenn die Option ist auf AUS gesetzt, wenn die Tabelle ist erstellt.
Wenn eine gespeicherte Prozedur erstellt wird, die SET QUOTED_IDENTIFIER und SET ANSI_NULLS Einstellungen werden erfasst und verwendet für nachfolgende Aufrufe von diese gespeicherte Prozedur.
Der Standard für Verbindungen kann auf Serverebene (sp_configure 'Benutzeroptionen') oder auf Datenbankebene (ALTER DATABASE) definiert werden. Für SSMS ist es unter "Tools ... Optionen .. Abfrageausführung .. SQL Server .. ANSI". Es ist auch der Standard für Client-Bibliotheken (außer DB-LIb).
Nun öffnen Sie ein SSMS-Abfragefenster und beginnen mit der Eingabe von "CREATE PROC ..", dann verwendet es SSMS-Einstellungen, wenn Sie den Code ausführen.
UND QUOTED IDENTIFIER SET kann nicht zur Laufzeit im gespeicherten Proc gesetzt werden. Zeigen Sie mir eine Referenz, bevor Sie nicht zustimmen ... Vom MS BOL Link oben:
Bei Ausführung in einem gespeicherten Prozedur, die Einstellung von SET QUOTED_IDENTIFIER wird nicht geändert.
Sie müssen hart arbeiten, um irgendeinen Code mit diesem OFF auszuführen ... also ist die wahrscheinlichste Lösung, den gespeicherten Prozess zu ändern oder neu zu erstellen.
Ich habe gerade diesen Artikel von Erland Sommarskog Der Fluch und Segen des dynamischen SQL gelesen und es enthält der folgende Abschnitt in Bezug auf die Einstellung EINSTELLUNGSQUOTEN IDENTIFIKATION:
Der Standardwert dafür Einstellung hängt vom Kontext ab, aber der bevorzugte Einstellung ist ON, und es muss eingeschaltet sein, um XQuery zu verwenden, indiziert Ansichten und Indizes für berechnete Spalten.
Verwendet Ihre gespeicherte Prozedur überhaupt XQuery, indizierte Sichten oder Indizes für berechnete Spalten?
In SQL Server 2005 ist SET QUOTED IDENTIFIER standardmäßig deaktiviert und nicht ON (es sei denn, Sie verwenden eine ODBC- oder OLE-Verbindung ... siehe dies für weitere Informationen).
Sie müssen die Tabelle nicht mit SET QUOTED IDENTIFIER ON erstellen, um sie zu verwenden.
Alles, was Sie tun müssen, ist, SET QUOTED IDENTIFIER ON am Anfang Ihres SP hinzuzufügen, um es für die Ausführung des Verfahrens zu aktivieren (und stellen Sie sicher, dass Sie, wenn Sie es nicht eingeschaltet lassen möchten, IDENTIFIZIERTER EINSTELLUNGEN EINGEBEN OFF, um es zurückzuschalten).
BEARBEITEN
Ich stehe korrigiert. Gemäß dieser MSDN-Seite ist die Option ANGEBOT IDENTIFIER standardmäßig aktiviert (außer Verbindung mit einer DB-Library-Anwendung.
Ich bin in einem ziemlich seltsamen Problem mit SQL Server 2005 stecken, die
wirft"QUOTED IDENTIFIER EINSTELLEN sollte beim Einfügen des Datensatzes"
aktiviert sein
(Verwendung als SP) für die bestimmte Tabelle. Dies funktionierte früher gut, aber wirft diesen Fehler zufällig.
Ich habe den SP verifiziert. Wir haben die Einstellungen für SET QUOTED IDENTIFIER nicht manuell eingegeben, daher muss es standardmäßig aktiviert sein.
Kann jemand klären, was das Problem sein könnte?
Die Tabelle muss mit SET QUOTED IDENTIFIER ON rechts erstellt werden? Ich habe das Tabellenskript noch nicht überprüft.
Ich habe festgestellt, dass dieses Problem nur bei den SPs auftritt, die eine Datumsspalte einfügen oder aktualisieren (modifiedAt) ... Ein Beispielwert ist '2009-08-10 06: 43: 59: 447' ..
Gibt es ein Problem mit den übergebenen Werten?
Schreiben Sie den gespeicherten Prozess, sichern / ändern Sie die SET-Optionen, führen Sie den ALTER PROC aus, um sicherzustellen, dass SET QUOTED IDENTIFIER ON gesetzt ist.
Warum?
Die Einstellung von "QUOTED IDENTIFIER EINSTELLEN" ist zur Erstellungszeit für gespeicherte Prozeduren definiert und für Tabellen immer "EIN". Quelle, BOL .
Wenn eine Tabelle erstellt wird, wird QUOTED angezeigt IDENTIFIER-Option wird immer als gespeichert ON in den Metadaten der Tabelle auch wenn die Option ist auf AUS gesetzt, wenn die Tabelle ist erstellt.
Wenn eine gespeicherte Prozedur erstellt wird, die SET QUOTED_IDENTIFIER und SET ANSI_NULLS Einstellungen werden erfasst und verwendet für nachfolgende Aufrufe von diese gespeicherte Prozedur.
Der Standard für Verbindungen kann auf Serverebene (sp_configure 'Benutzeroptionen') oder auf Datenbankebene (ALTER DATABASE) definiert werden. Für SSMS ist es unter "Tools ... Optionen .. Abfrageausführung .. SQL Server .. ANSI". Es ist auch der Standard für Client-Bibliotheken (außer DB-LIb).
Nun öffnen Sie ein SSMS-Abfragefenster und beginnen mit der Eingabe von "CREATE PROC ..", dann verwendet es SSMS-Einstellungen, wenn Sie den Code ausführen.
UND QUOTED IDENTIFIER SET kann nicht zur Laufzeit im gespeicherten Proc gesetzt werden. Zeigen Sie mir eine Referenz, bevor Sie nicht zustimmen ... Vom MS BOL Link oben:
Bei Ausführung in einem gespeicherten Prozedur, die Einstellung von SET QUOTED_IDENTIFIER wird nicht geändert.
Sie müssen hart arbeiten, um irgendeinen Code mit diesem OFF auszuführen ... also ist die wahrscheinlichste Lösung, den gespeicherten Prozess zu ändern oder neu zu erstellen.
Ich habe gerade diesen Artikel von Erland Sommarskog Der Fluch und Segen des dynamischen SQL gelesen und es enthält der folgende Abschnitt in Bezug auf die Einstellung EINSTELLUNGSQUOTEN IDENTIFIKATION:
Der Standardwert dafür Einstellung hängt vom Kontext ab, aber der bevorzugte Einstellung ist ON, und es muss eingeschaltet sein, um XQuery zu verwenden, indiziert Ansichten und Indizes für berechnete Spalten.
Verwendet Ihre gespeicherte Prozedur überhaupt XQuery, indizierte Sichten oder Indizes für berechnete Spalten?
In SQL Server 2005 ist SET QUOTED IDENTIFIER standardmäßig deaktiviert und nicht ON (es sei denn, Sie verwenden eine ODBC- oder OLE-Verbindung ... siehe dies für weitere Informationen).
Sie müssen die Tabelle nicht mit SET QUOTED IDENTIFIER ON erstellen, um sie zu verwenden.
Alles, was Sie tun müssen, ist, SET QUOTED IDENTIFIER ON am Anfang Ihres SP hinzuzufügen, um es für die Ausführung des Verfahrens zu aktivieren (und stellen Sie sicher, dass Sie, wenn Sie es nicht eingeschaltet lassen möchten, IDENTIFIZIERTER EINSTELLUNGEN EINGEBEN OFF, um es zurückzuschalten).
BEARBEITEN
Ich stehe korrigiert. Gemäß dieser MSDN-Seite ist die Option ANGEBOT IDENTIFIER standardmäßig aktiviert (außer Verbindung mit einer DB-Library-Anwendung.
Tags und Links sql-server sqlcmd