Delen via


Internationale Transact-SQL-instructies schrijven

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database in Microsoft Fabric

Databases en databasetoepassingen die gebruikmaken van Transact-SQL instructies, worden draagbaarder van de ene taal naar de andere, of ondersteunen meerdere talen, als de volgende richtlijnen worden gevolgd:

  • Gebruik vanaf SQL Server 2019 (15.x) en in Azure SQL Database een van de volgende opties:

    • De gegevenstypen char, varchar en varchar(max) met een UTF-8-sortering en gegevens worden gecodeerd met behulp van UTF-8.
    • De gegevenstypen nchar, nvarchar en nvarchar(max) met ondersteuning voor aanvullende tekens (SC) en gegevens worden gecodeerd met behulp van UTF-16. Het gebruik van een niet-SC-sortering resulteert in gegevens die worden gecodeerd met UCS-2.

    Dit voorkomt problemen met het converteren van codepagina's. Zie Opslagverschillen tussen UTF-8 en UTF-16 voor andere overwegingen.

  • Tot SQL Server 2017 (14.x) vervangt u alle toepassingen van de gegevenstypen char, varchar en varchar(max) door nchar, nvarchar en nvarchar(max). Als u een sortering met een aanvullend teken (SC) gebruikt, worden gegevens gecodeerd met UTF-16. Het gebruik van een niet-SC-sortering resulteert in gegevens die worden gecodeerd met UCS-2. Dit voorkomt problemen met het converteren van codepagina's. Zie Sortering en Unicode-ondersteuningvoor meer informatie.

    Belangrijk

    Het gegevenstype tekst is afgeschaft en mag niet worden gebruikt in nieuwe ontwikkelwerkzaamheden. Een plan om textgegevens te converteren naar varchar(max).

  • Wanneer u maand- en dag-van-weekvergelijkingen en bewerkingen uitvoert, gebruikt u de numerieke datumonderdelen in plaats van de naamtekenreeksen. Verschillende taalinstellingen retourneren verschillende namen voor de maanden en weekdagen. Retourneert DATENAME(MONTH,GETDATE()) bijvoorbeeld May wanneer de taal is ingesteld op Amerikaans Engels, wordt geretourneerd Mai wanneer de taal is ingesteld op Duits en wordt geretourneerd mai wanneer de taal is ingesteld op Frans. Gebruik in plaats daarvan een functie zoals DATEPART die het nummer van de maand gebruikt in plaats van de naam. Gebruik de namen DATEPART wanneer u resultatensets bouwt die worden weergegeven aan een gebruiker, omdat de datumnamen vaak zinvoller zijn dan een numerieke weergave. Codeer echter geen logica die afhankelijk is van de weergegeven namen die afkomstig zijn van een specifieke taal.

  • Wanneer u datums opgeeft in vergelijkingen of voor invoer voor INSERT- of UPDATE-instructies, gebruikt u constanten die op dezelfde manier worden geïnterpreteerd voor alle taalinstellingen:

    • ADO-, OLE DB- en ODBC-toepassingen moeten gebruikmaken van de ODBC-tijdstempel, -datum- en -tijd-escape-componenten van:

      { ts'jjjj-mm-ddhh:mm:ss [.fff] '} zoals: { ts'1998-09-24 10:02:20'}

      { d'jjjj-mm-dd'} zoals: { d'1998-09-24'}

      { t'uu:mm:ss}, zoals: { t'10:02:20'}

    • Toepassingen die gebruikmaken van andere API's, of Transact-SQL scripts, opgeslagen procedures en triggers, moeten de niet-gescheiden numerieke tekenreeksen gebruiken. Bijvoorbeeld jjjjmmdd als 19980924.

    • Toepassingen die andere API's gebruiken, of Transact-SQL scripts, opgeslagen procedures en triggers, moeten de CONVERT-instructie gebruiken met een expliciete stijlparameter voor alle conversies tussen de tijd, datum, smalldate, datum/tijd, datum/tijd2, datetimeoffset-gegevenstypen en tekenreeksgegevenstypen. De volgende instructie wordt bijvoorbeeld op dezelfde manier geïnterpreteerd voor alle verbindingsinstellingen voor taal- of datumnotatie:

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

Zie ook

CAST en CONVERTEREN (Transact-SQL)
DATEPART (Transact-SQL)
Sorteervolgorde en Unicode-ondersteuning