QUOTED IDENTIFIER EINSTELLEN sollte beim Einfügen eines Datensatzes aktiviert sein

8

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?

    
RameshVel 16.07.2009, 14:03
quelle

4 Antworten

23
___ qstnhdr ___ QUOTED IDENTIFIER EINSTELLEN sollte beim Einfügen eines Datensatzes aktiviert sein ___ answer1137963 ___

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.

    
___ tag123sqlserver ___ Microsoft SQL Server ist ein relationales Datenbankverwaltungssystem (RDBMS). Verwenden Sie dieses Tag für alle SQL Server-Editionen, einschließlich Compact, Express, Azure, Fast-Track, APS (früher PDW) und Azure SQL DW. Verwenden Sie dieses Tag nicht für andere Arten von DBMS (MySQL, PostgreSQL, Oracle usw.). Verwenden Sie dieses Tag nicht für Probleme bei der Software- und mobilen Entwicklung, es sei denn, es steht in direktem Zusammenhang mit der Datenbank. ___ answer1137913 ___

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?

    
___ tag123sqlcmd ___ SQLCMD ist ein Befehlszeilentool zum Ausführen von SQL-Stapeln auf Microsoft SQL Server. ___ answer1137882 ___

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.

    
___ qstntxt ___

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?

    
___
RameshVel 12.08.2009, 12:02
quelle
5

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.

    
gbn 16.07.2009 14:22
quelle
1

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?

    
Amal Sirisena 16.07.2009 14:15
quelle
1

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.

    
Justin Niessner 16.07.2009 14:11
quelle

Tags und Links