Skriv internationella Transact-SQL-instruktioner

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-databas i Microsoft Fabric

Databaser och databasprogram som använder Transact-SQL-instruktioner blir mer portabla från ett språk till ett annat, eller stöder flera språk om följande riktlinjer följs:

  • Från och med SQL Server 2019 (15.x) och i Azure SQL Database använder du antingen:

    • Datatyperna char, varchar och varchar(max) med en UTF-8-aktiverad sortering och data kodas med UTF-8.
    • Datatyperna nchar, nvarchar och nvarchar(max) med extra tecken (SC) aktiverad sortering och data kodas med UTF-16. Om du använder en icke-SC-sortering resulterar det i att data kodas med UCS-2.

    Detta undviker problem med konvertering av kodsidor. Mer information finns i Lagringsskillnader mellan UTF-8 och UTF-16.

  • Upp till SQL Server 2017 (14.x) ersätter du alla användningar av datatyperna char, varchar och varchar(max) med nchar, nvarchar och nvarchar(max). Om du använder ett extra tecken (SC) aktiverat sortering kodas data med UTF-16. Om du använder en icke-SC-sortering resulterar det i att data kodas med UCS-2. Detta undviker problem med konvertering av kodsidor. Mer information finns i Collation och Unicode Support.

    Viktigt!

    Textdatatypen är inaktuell och bör inte användas i nytt utvecklingsarbete. Planera att konvertera textdata till varchar(max).

  • När du gör jämförelser och åtgärder för månad och dag i veckan använder du de numeriska datumdelarna i stället för namnsträngarna. Olika språkinställningar returnerar olika namn för månaderna och vardagar. Returnerar till exempel DATENAME(MONTH,GETDATE()) när språket är inställt på amerikansk engelska, returnerar May när språket är inställt på tyska och returnerar Mai när språket är inställt på mai franska. Använd i stället en funktion som DATEPART som använder månadens nummer i stället för namnet. Använd DATEPART-namnen när du skapar resultatuppsättningar som ska visas för en användare, eftersom datumnamnen ofta är mer meningsfulla än en numerisk representation. Koda dock inte någon logik som är beroende av att de namn som visas är från ett visst språk.

  • När du anger datum i jämförelser eller för indata till INSERT- eller UPDATE-instruktioner använder du konstanter som tolkas på samma sätt för alla språkinställningar:

    • ADO-, OLE DB- och ODBC-program bör använda ODBC-tidsstämpel-, datum- och tids-escape-sekvenserna:

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

      { d'ååååmm--dd'} till exempel: { d'1998-09-24'}

      { t'hh:mm:ss'} som: { t'10:02:20'}

    • Program som använder andra API:er, eller Transact-SQL skript, lagrade procedurer och utlösare, bör använda de numeriska strängarna som inte är skilda. Till exempel yyyymmdd som 19980924.

    • Program som använder andra API:er eller Transact-SQL skript, lagrade procedurer och utlösare bör använda KONVERTERA-instruktionen med en explicit formatparameter för alla konverteringar mellan datatyperna time, date, smalldate, datetime, datetime2 och datetimeoffset och teckensträngen. Följande instruktion tolkas till exempel på samma sätt för anslutningsinställningar för alla språk eller datumformat:

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

Se även

CAST och CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Stöd för sortering och Unicode