Schreiben internationaler Transact-SQL-Anweisungen

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Datenbanken und Datenbankanwendungen, die Transact-SQL-Anweisungen verwenden, können leichter von einer Sprache in eine andere übertragen werden bzw. unterstützen mehrere Sprachen, wenn die folgenden Richtlinien eingehalten werden:

  • Ab SQL Server 2019 (15.x) und in der Azure SQL-Datenbank verwenden Sie:

    • Die Datentypen char, varchar und varchar(max) mit einer für UTF-8 aktivierten Sortierung. Dabei werden die Daten mit UTF-8 codiert.
    • Die Datentypen nchar, nvarchar und nvarchar(max) mit einer für ergänzende Zeichen (Supplementary Characters, SC) aktivierten Sortierung. Dabei werden die Daten mit UTF-16 codiert. Wird eine Sortierung ohne ergänzende Zeichen verwendet, werden die Daten mit UCS-2 codiert.

    Auf diese Weise werden Probleme mit der Codepagekonvertierung vermieden. Weitere Überlegungen finden Sie unter Speicherunterschiede zwischen UTF-8 und UTF-16.

  • Ersetzen Sie bis SQL Server 2017 (14.x) die Datentypen char, varchar und varchar(max) mit nchar, nvarchar und nvarchar(max). Wird eine für ergänzende Zeichen (SC) aktivierte Sortierung verwendet, werden die Daten mithilfe von UTF-16 codiert. Wird eine Sortierung ohne ergänzende Zeichen verwendet, werden die Daten mit UCS-2 codiert. Auf diese Weise werden Probleme mit der Codepagekonvertierung vermieden. Weitere Informationen finden Sie unter Sortierungs- und Unicode-Support.

    Wichtig

    Der Datentyp text ist veraltet und sollte beim Entwickeln nicht verwendet werden. Konvertieren Sie text-Daten in varchar(max).

  • Verwenden Sie für Vergleiche und Vorgänge für bestimmte Monate oder Wochentage die numerischen Datumseinheiten anstelle der Namenszeichenfolgen. Unterschiedliche Spracheinstellungen geben verschiedene Namen für Monate und Arbeitstage zurück. Beispielsweise gibt DATENAME(MONTH,GETDATE()) May zurück, wenn die Sprache auf US-Englisch festgelegt ist, beim Festlegen der Sprache Deutsch wird Mai und beim Festlegen der Sprache Französisch mai zurückgegeben. Verwenden Sie stattdessen eine Funktion wie DATEPART, die die Monatszahl anstelle des Namens verwendet. Verwenden Sie DATEPART-Namen, wenn Sie Resultsets erstellen, die für einen Benutzer angezeigt werden sollen, da Datumsbezeichnungen häufig aussagekräftiger sind als eine numerische Darstellung. Codieren Sie jedoch keine Logik, die davon abhängt, ob die angezeigten Namen aus einer bestimmten Programmiersprache stammen.

  • Wenn Sie Datumseingaben in Vergleichen oder als Eingabe in INSERT- oder UPDATE-Anweisungen angeben, verwenden Sie Konstanten, die in allen Spracheinstellungen gleich interpretiert werden:

    • ADO-, OLE DB- und ODBC-Anwendungen sollten folgende ODBC-Timestamps und folgende ESCAPE-Klauseln für Datum und Zeit verwenden:

      { ts' JJJJ - MM - TT hh : mm : ss [.fff] '} z. B.: { ts'1998-09-24 10:02:20'}

      { d' JJJJ - MM - TT '} z. B.: { d'1998-09-24'}

      { t'hh:mm:ss'} z. B.: { t'10:02:20'}

    • Anwendungen, die andere APIs verwenden, oder Transact-SQL-Skripts, gespeicherte Prozeduren und Trigger sollten unstrukturierte Zeichenfolgen verwenden. Zum Beispiel yyyymmdd für 19980924.

    • Anwendungen, die andere APIs verwenden, oder Transact-SQL-Skripts, gespeicherte Prozeduren und Trigger sollten die CONVERT-Anweisung mit dem expliziten Parameter „style“ für alle Konvertierungen zwischen den Datentypen time, date, smalldate, datetime, datetime2 und datetimeoffset sowie Zeichenfolgen-Datentypen verwenden. Die folgende Anweisung wird beispielsweise für alle Verbindungseinstellungen für Sprach- oder Datumsformate gleich interpretiert:

      SELECT *  
      FROM AdventureWorks2022.Sales.SalesOrderHeader  
      WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)  
      

Weitere Informationen

CAST und CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Collation and Unicode Support