Anforderungen an Bezeichner

Objektbezeichner ohne Anführungszeichen

  • Beginnen Sie mit einem Buchstaben (A-Z, a-z) oder einem Unterstrich („_“).

  • Enthalten nur Buchstaben, Unterstriche, Dezimalstellen (0-9) und Dollarzeichen („$“).

  • Werden als Großbuchstaben gespeichert und aufgelöst (z. B. id wird als ID gespeichert und aufgelöst).

Wenn Sie einen Bezeichner in doppelte Anführungszeichen setzen (z. B. „Mein Bezeichner mit Leerzeichen und Interpunktion.“) gelten folgende Regeln:

  • Die Groß-/Kleinschreibung des Bezeichners wird beim Speichern und Auflösen des Bezeichners beibehalten (z. B. "id" wird als id gespeichert und aufgelöst).

  • Der Bezeichner kann ASCII-, erweiterte ASCII- und Nicht-ASCII-Zeichen enthalten und auch mit diesen beginnen.

    Für die Verwendung von doppelten Anführungszeichen innerhalb eines Bezeichners muss dieser in doppelte Anführungszeichen eingeschlossen werden. Beispiel:

    create table "quote""andunquote""" ...
    
    Copy

    erstellt eine Tabelle namens:

    quote"andunquote"
    
    Copy

    wobei die Anführungszeichen Teil des Namens sind.

Bemerkung

  • Unabhängig davon, ob ein Bezeichner keine oder doppelte Anführungszeichen enthält, dürfen maximale nur 255 Zeichen (einschließlich Leerzeichen) verwendet werden.

  • Bezeichner können auch durch Zeichenfolgenliterale, Sitzungsvariablen oder Bindungsvariablen spezifiziert werden. Weitere Details dazu finden Sie unter SQL-Variablen.

Unter diesem Thema:

Bezeichner ohne Anführungszeichen

Wenn ein Bezeichner nicht in doppelte Anführungszeichen eingeschlossen ist, muss er mit einem Buchstaben oder einem Unterstrich (_) beginnen und darf keine Sonderzeichen oder Leerzeichen enthalten.

Im Folgenden finden Sie alle Beispiele für gültige Bezeichner. Die Groß-/Kleinschreibung der Zeichen in diesen Bezeichnern wird allerdings nicht beibehalten:

myidentifier
MyIdentifier1
My$identifier
_my_identifier
Copy

Bezeichner mit doppelten Anführungszeichen

Bei Bezeichnern mit Trennzeichen, die von doppelten Anführungszeichen eingeschlossen sind, muss die Groß-/Kleinschreibung beachtet werden, und sie können mit allen gültigen Zeichen beginnen und alle gültigen Zeichen enthalten, einschließlich:

  • Zahlen

  • Sonderzeichen (., ', !, @, #, $, %, ^, &, * usw.)

  • ASCII- und Nicht-ASCII-Sonderzeichen

  • Leerzeichen

Beispiel:

"MyIdentifier"
"my.identifier"
"my identifier"
"My 'Identifier'"
"3rd_identifier"
"$Identifier"
"идентификатор"
Copy

Wichtig

Wenn ein Objekt mit einem Bezeichner in doppelten Anführungszeichen erstellt wird, muss der Bezeichner bei Bezugnahme in einer Abfrage oder einer anderen SQL-Anweisung exakt wie erstellt angegeben werden, einschließlich der doppelten Anführungszeichen. Fehlende Anführungszeichen können zu einem Object does not exist-Fehler (oder einer ähnlichen Art von Fehler) führen.

Beachten Sie außerdem, dass der gesamte Bezeichner in Anführungszeichen eingeschlossen sein muss, wenn auf ihn in einer Abfrage oder SQL-Anweisung verwiesen wird. Dies ist besonders wichtig, wenn Punkte (.) in Bezeichnern verwendet werden, da Punkte auch in vollqualifizierten Objektnamen zum Trennen der einzelnen Objekte verwendet werden.

Beispiel:

"My.DB"."My.Schema"."Table.1"
Copy

Ausnahmen

  • Bezeichner in doppelten Anführungszeichen werden nicht für die Namen von benutzerdefinierten Funktionen (UDFs) und Prozeduren unterstützt, bei denen die Handler-Sprache Java, JavaScript, Snowflake Scripting oder SQL ist.

  • Für die Namen von benutzerdefinierten Funktionen (UDFs) und Prozeduren, bei denen die Handler-Sprache Java ist, dürfen nur ASCII-Zeichen verwendet werden.

Auflösung des Bezeichners

Standardmäßig wendet Snowflake die folgenden Regeln an, um Bezeichner zu speichern (zur Erstellungs-/Definitionszeit) und aufzulösen (in Abfragen und anderen SQL-Anweisungen):

  • Wenn ein Bezeichner nicht in Anführungszeichen gesetzt wird, wird er in Großbuchstaben gespeichert und aufgelöst.

  • Wenn ein Bezeichner in doppelte Anführungszeichen gesetzt wird, wird er genau so gespeichert und aufgelöst, wie er eingegeben wurde, einschließlich Groß-/Kleinschreibung.

Beispielsweise sind die folgenden Namen äquivalent und werden alle zu TABLENAME aufgelöst:

TABLENAME
tablename
tableName
TableName
Copy

Im Gegensatz dazu werden die folgenden vier Namen als unterschiedliche, eindeutige Werte betrachtet:

"TABLENAME"
"tablename"
"tableName"
"TableName"
Copy

Wenn diese Bezeichner verwendet werden, um Objekte des gleichen Typs (z. B. Tabellen) zu erstellen, würde dies zur Erstellung von vier verschiedenen Objekten führen.

Migrieren von Datenbanken, die bei Bezeichnern in doppelten Anführungszeichen die Groß-/Kleinschreibung nicht berücksichtigen

In der ANSI/ISO-Norm für SQL werden Bezeichner in doppelten Anführungszeichen (abgegrenzte Bezeichner) unter Berücksichtigung der Groß-/Kleinschreibung behandelt. Einige Unternehmen stellen jedoch Datenbanken zur Verfügung, bei denen die Groß-/Kleinschreibung der Bezeichner in doppelten Anführungszeichen nicht beachtet wird.

Wenn Sie Ihre Daten und Anwendungen von einer dieser Datenbanken nach Snowflake migrieren, verwenden diese Anwendungen möglicherweise doppelte Anführungszeichen um Bezeichner, bei denen die Groß-/Kleinschreibung nicht beachtet werden soll. Dies kann verhindern, dass Snowflake die Bezeichner korrekt auflöst. Beispielsweise könnte eine Anwendung doppelte Anführungszeichen um einen Bezeichner in Kleinbuchstaben verwenden, und in der Snowflake-Datenbank liegt der Bezeichner mit Großbuchstaben vor.

Um diese Einschränkung zu umgehen, stellt Snowflake den Sitzungsparameter QUOTED_IDENTIFIERS_IGNORE_CASE bereit, der Snowflake veranlasst, Kleinbuchstaben in Bezeichnern in Anführungszeichen beim Erstellen und Suchen von Objekten als Großbuchstaben zu behandeln.

Weitere Details dazu finden Sie im nächsten Abschnitt:

Bemerkung

Das Ändern des Parameterwertes kann sich auf die Fähigkeit auswirken, vorhandene Objekte zu finden. Weitere Informationen dazu finden Sie unter Auswirkungen der Änderung des Parameters.

Steuern der Groß-/Kleinschreibung mit dem Parameter QUOTED_IDENTIFIERS_IGNORE_CASE

Um Snowflake so zu konfigurieren, dass alphabetische Zeichen in Bezeichnern, die in doppelten Anführungszeichen eingeschlossen sind, für die Sitzung als Großbuchstaben behandelt werden, setzen Sie den Parameter für die Sitzung auf TRUE. Mit dieser Einstellung werden alle alphabetischen Zeichen in Bezeichnern als Großbuchstaben gespeichert und aufgelöst.

So sind beispielsweise alle folgenden Namen gleichwertig und werden zu TABLENAME aufgelöst:

TABLENAME
tablename
tableName
TableName
"TABLENAME"
"tablename"
"tableName"
"TableName"
Copy

Beachten Sie, dass der Parameter keine der Einschränkungen beeinflusst, die für Bezeichner ohne Anführungszeichen hinsichtlich Zahlen, Sonderzeichen und Leerzeichen gelten.

Auswirkungen der Änderung des Parameters

Das Ändern des Sitzungsparameters QUOTED_IDENTIFIERS_IGNORE_CASE wirkt sich nur auf neue Objekte und Abfragen aus:

  • Wenn ein Objekt mit einem Bezeichner mit gemischter Groß-/Kleinschreibung in doppelten Anführungszeichen erstellt wird, speichert Snowflake bei der Standardeinstellung FALSE den Bezeichner mit gemischter Groß-/Kleinschreibung.

  • Wenn der Parameter später in TRUE geändert wird, kann Snowflake diesen Bezeichner mit doppelten Anführungszeichen und Groß-/Kleinschreibung nicht auflösen und das Objekt nicht abrufen.

Tipp

Aufgrund der Auswirkungen, die eine Änderung des Parameters auf die Auflösung von Bezeichnern haben kann, empfehlen wir hochnachdrücklich, frühzeitig bei Ihrer Implementierung von Snowflake eine Entscheidung über die Methode der Bezeichnerauflösung zu treffen. Lassen Sie dann Ihren Kontoadministrator den Parameter auf Kontoebene setzen, um diese Auflösungsmethode standardmäßig zu erzwingen.

Auch wenn der Parameter jederzeit auf Sitzungsebene überschrieben werden kann, empfehlen wir, den Standardwert des Parameters nicht zu ändern, es sei denn, dies ist ausdrücklich erforderlich.

Die folgenden Beispiele veranschaulichen das Verhalten nach der Änderung des Parameters von FALSE in TRUE:

-- Set the default behavior
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = false;

-- Create a table with a double-quoted identifier
CREATE TABLE "One" (i int);  -- stored as "One"

-- Create a table with an unquoted identifier
CREATE TABLE TWO(j int);     -- stored as "TWO"

-- These queries work
SELECT * FROM "One";         -- searches for "One"
SELECT * FROM two;           -- searched for "TWO"
SELECT * FROM "TWO";         -- searches for "TWO"

-- These queries do not work
SELECT * FROM One;           -- searches for "ONE"
SELECT * FROM "Two";         -- searches for "Two"

-- Change to the all-uppercase behavior
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = true;

-- Create another table with a double-quoted identifier
CREATE TABLE "Three"(k int); -- stored as "THREE"

-- These queries work
SELECT * FROM "Two";         -- searches for "TWO"
SELECT * FROM two;           -- searched for "TWO"
SELECT * FROM "TWO";         -- searches for "TWO"
SELECT * FROM "Three";       -- searches for "THREE"
SELECT * FROM three;         -- searches for "THREE"

-- This query does not work now - "One" is not retrievable
SELECT * FROM "One";         -- searches for "ONE"
Copy

Wenn sich die Bezeichner für zwei Tabellen nur von Fall zu Fall unterscheiden, kann ein Bezeichner nach Änderung des Parameters in eine andere Tabelle aufgelöst werden:

-- Set the default behavior
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = false;

-- Create a table with a double-quoted identifier
CREATE TABLE "Tab" (i int);  -- stored as "Tab"

-- Create a table with an unquoted identifier
CREATE TABLE TAB(j int);     -- stored as "TAB"

-- This query retrieves "Tab"
SELECT * FROM "Tab";         -- searches for "Tab"

-- Change to the all-uppercase behavior
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = true;

-- This query retrieves "TAB"
SELECT * FROM "Tab";         -- searches for "TAB"
Copy