Schreiben internationaler Transact-SQL-Anweisungen

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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:

  • Verwenden Sie ab SQL Server 2019 (15.x) und in Azure SQL-Datenbank eine der folgenden Optionen:

    • 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) durch 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 Collation and 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. DATENAME(MONTH,GETDATE()) gibt beispielsweise May zurück, wenn die Sprache auf Englisch, Mai, wenn die Sprache auf Deutsch und mai, wenn die Sprache auf Französisch festgelegt ist. 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-TThh: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