Internationale Transact-SQL-Anweisungen schreiben

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Datenbank in Microsoft Fabric

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 UTF-8-fähigen Sortierung, deren Daten mit UTF-8 codiert sind.
    • 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. Die Verwendung einer Sortierung ohne SC-Unterstützung führt dazu, dass Daten mit UCS-2 codiert werden.

    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 Sortierung mit Unterstützung für ergänzende Zeichen (SC) verwendet, werden die Daten mit UTF-16 kodiert. Die Verwendung einer Nicht-SC-Sortierung führt dazu, dass die Daten mit UCS-2 codiert werden. Auf diese Weise werden Probleme mit der Codepage-Konvertierung vermieden. Weitere Informationen finden Sie unter Sortierungs- und Unicode-Support.

    Wichtig

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

  • Verwenden Sie beim Vergleichen von Monaten und Wochentagen sowie bei entsprechenden Operationen die numerischen Datumsbestandteile anstelle der Namenzeichenfolgen. 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 Datumsangaben in Vergleichen oder zur Eingabe in INSERT- oder UPDATE-Anweisungen angeben, verwenden Sie Konstanten, die für alle Spracheinstellungen auf die gleiche Weise interpretiert werden:

    • ADO-, OLE DB- und ODBC-Anwendungen sollten die ODBC-Escape-Klauseln für Zeitstempel, Datum und Uhrzeit verwenden:

      { ts'yyyy-mm-ddhh:mm:ss [.fff] '} zum Beispiel: { ts'1998-09-24 10:02:20'}

      { d'yyyy-mm-dd'} z. B.: { d'1998-09-24'}

      { t'hh:mm:ss'} zum Beispiel: { t'10:02:20'}

    • Anwendungen, die andere APIs, Transact-SQL-Skripte, gespeicherte Prozeduren und Trigger verwenden, sollten numerische Zeichenfolgen ohne Trennzeichen 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)  
      

Siehe auch

CAST und CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Sortierung und Unicode-Unterstützung