Megosztás a következőn keresztül:


Nemzetközi Transact-SQL utasítások írása

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Az Transact-SQL utasításokat használó adatbázisok és adatbázis-alkalmazások hordozhatóbbá válnak az egyik nyelvről a másikra, vagy több nyelvet is támogatnak, ha az alábbi irányelveket követik:

  • Az SQL Server 2019 -től (15.x) és az Azure SQL Database-től kezdve használja a következőt:

    • A char, varchar és varchar(max) adattípusok UTF-8-kompatibilis rendezéssel, és az adatok kódolása UTF-8 használatával történik.
    • Az nchar, nvarchar és nvarchar(max) adattípusok kiegészítő karakterekkel (SC) engedélyezett rendezéssel, és az adatok UTF-16-tal vannak kódolva. Nem SC-rendezés esetén az adatok kódolása UCS-2 használatával történik.

    Ezzel elkerülheti a kódlapkonverzióval kapcsolatos problémákat. További szempontokat az UTF-8 és az UTF-16 közötti Tárolási különbségek című témakörben talál.

  • Az SQL Server 2017 (14.x) verziójáig cserélje le a char, varchar és varchar(max) adattípusok minden használatát nchar, nvarchar és nvarchar(max) adattípusokra. Ha kiegészítő karaktert (SC) támogató rendezést használ, az adatok UTF-16-tal vannak kódolva. Nem SC-rendezés esetén az adatok kódolása UCS-2 használatával történik. Ezzel elkerülheti a kódlapkonverzióval kapcsolatos problémákat. További információ: kolláció és Unicode-támogatás.

    Fontos

    A szöveges adattípus elavult, és nem használható új fejlesztési munkákhoz. Tervezze meg, hogy a szöveges adatokat varchar(max) értékre konvertálja.

  • Ha hónap és nap összehasonlítást és műveleteket végez, a névsztringek helyett használja a numerikus dátumrészeket. A különböző nyelvi beállítások különböző neveket adnak vissza a hónapokra és a hétköznapokra vonatkozóan. Például akkor ad visszaDATENAME(MONTH,GETDATE()), May ha a nyelv amerikai angolra van állítva, akkor adja visszaMai, ha a nyelv németre van állítva, és akkor tér visszamai, ha a nyelv francia nyelvre van állítva. Ehelyett használjon olyan függvényt, mint a DATEPART , amely a hónap számát használja a név helyett. A DATEPART-neveket akkor használja, amikor eredményhalmazokat hoz létre, hogy megjelenjenek egy felhasználó számára, mivel a dátumnevek gyakran jelentéssel bírnak, mint egy numerikus ábrázolás. Ne kódjon azonban olyan logikát, amely attól függ, hogy a megjelenített nevek egy adott nyelvről származnak-e.

  • Amikor dátumokat ad meg összehasonlításokban, vagy az INSERT vagy UPDATE utasítások bemeneteként, használjon minden nyelvi beállításnál azonosan értelmezett állandókat.

    • Az ADO-, OLE DB- és ODBC-alkalmazásoknak a következő ODBC-időbélyegeket, dátum- és időfelszabadító záradékokat kell használniuk:

      { ts'yyyy-mm-ddhh:mm:ss [.fff] '} például: { ts'1998-09-24 10:02:20'}

      { d'yyyy-mm-dd'} például: { d'1998-09-24'}

      { t'hh:mm:ss'} például: { t'10:02:20'}

    • Az egyéb API-kat vagy Transact-SQL szkripteket, tárolt eljárásokat és triggereket használó alkalmazásoknak az elválasztatlan numerikus sztringeket kell használniuk. Például yyyymmdd mint 19980924.

    • Az egyéb API-kat vagy Transact-SQL szkripteket, tárolt eljárásokat és eseményindítókat használó alkalmazásoknak explicit stílusparaméterrel kell használniuk a CONVERT utasítást az idő, a dátum, a kisdátum, a datetime, a datetime2 és a datetimeoffset adattípus és a karaktersztring adattípus közötti összes konverzióhoz. A rendszer például a következő utasítást ugyanúgy értelmezi az összes nyelvi vagy dátumformátum-kapcsolati beállítás esetében:

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

Lásd még

CAST és CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Karakterhalmaz rendezés és Unicode támogatás