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


Adattípus-átalakítás (adatbázismotor)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Az adattípusok a következő forgatókönyvekben konvertálhatók:

  • Ha az egyik objektumból származó adatokat áthelyezik, összehasonlítják vagy összevonják egy másik objektumból származó adatokkal, előfordulhat, hogy az adatokat az egyik objektum adattípusából a másik adattípusába kell konvertálni.
  • Ha egy Transact-SQL eredményoszlopból, visszatérési kódból vagy kimeneti paraméterből származó adatokat egy programváltozóba helyezi át, az adatokat az SQL Server rendszer adattípusából a változó adattípusába kell konvertálni.

Amikor egy alkalmazásváltozó és egy SQL Server-eredményhalmaz oszlopa, visszatérési kódja, paramétere vagy paraméterjelölője között konvertál, a támogatott adattípus-átalakításokat az adatbázis API határozza meg.

Implicit és explicit átalakítás

Az adattípusok implicit módon vagy explicit módon konvertálhatók.

Az implicit konverziók nem láthatók a felhasználó számára. Az SQL Server automatikusan átalakítja az adatokat egyik adattípusból a másikba. Ha például egy kisint egy inthez hasonlít, a rendszer implicit módon intre konvertálja a kisintet, mielőtt az összehasonlítás folytatódik.

GETDATE() implicit módon konvertálja dátumstílussá0. SYSDATETIME() implicit módon konvertálja dátumstílussá 21.

Az explicit konverziók a vagy CAST függvényeket CONVERT használják.

A CAST és a CONVERT függvények egy értéket (helyi változót, oszlopot vagy más kifejezést) konvertálnak egyik adattípusból egy másikba. Az alábbi CAST függvény például a számértékeket $157.27 a következő karaktersorozatmá '157.27'alakítja:

CAST ( $157.27 AS VARCHAR(10) )  

Használja CAST ahelyett CONVERT , hogy azt szeretné, hogy Transact-SQL programkód megfeleljen az ISO-nak. Használja CONVERT ahelyett CAST , hogy kihasználja a stílus funkcióit a CONVERT.

Az alábbi ábra az SQL Server által biztosított adattípusokhoz engedélyezett összes explicit és implicit adattípus-átalakítást mutatja be. Ezek közé tartozik az xml, a bigint és a sql_variant. Az sql_variant adattípusból nem történik implicit átalakítás a hozzárendelésen, de implicit átalakítás sql_variant.

A sorokban és oszlopokban található összes SQL-adattípust tartalmazó részletes táblázat, amely azt jelzi, hogy milyen típusú adattípusok konvertálása lehetséges.

Bár az előző diagram az SQL Serverben engedélyezett összes explicit és implicit konverziót szemlélteti, nem jelzi az átalakítás eredményül kapott adattípusát.

  • Amikor az SQL Server explicit konverziót hajt végre, maga az utasítás határozza meg az eredményül kapott adattípust.
  • Implicit konverziók esetén a hozzárendelési utasítások, például egy változó értékének beállítása vagy egy érték oszlopba való beszúrása a változó deklarációja vagy oszlopdefiníciója által meghatározott adattípust eredményezik.
  • Összehasonlító operátorok vagy más kifejezések esetén az eredményként kapott adattípus az adattípus elsőbbsége szabályaitól függ.

A következő szkript például egy varchar típusú változót határoz meg, egy int típusú értéket rendel hozzá a változóhoz, majd kiválasztja a változó összefűzését egy sztringgel.

DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'

A program a függvény int értékét 1varchar értékké alakítja át, így az SELECT utasítás az értéket 1 is a string.adja vissza.

Az alábbi példa egy int változóval rendelkező hasonló szkriptet mutat be:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'

Ebben az esetben az utasítás a SELECT következő hibát eredményezi:

Msg 245, Level 16, State 1, Line 3 Conversion failed when converting the varchar value ' is not a string.' to data type int.

A kifejezés @notastring + ' is not a string.'kiértékeléséhez az SQL Server az adattípus-elsőbbségi szabályok szerint végzi el az implicit konverziót, mielőtt a kifejezés eredménye kiszámítható lenne. Mivel az int a varcharnál nagyobb elsőbbséget élvez, az SQL Server megpróbálja egész számmá alakítani a sztringet, és meghiúsul, mert ez a sztring nem konvertálható egész számmá. Ha a kifejezés egy konvertálható sztringet ad meg, az utasítás sikeres lesz, ahogyan az alábbi példában is látható:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'

Ebben az esetben a sztring 1 egész számmá 1konvertálható, így ez az SELECT utasítás az értéket 2adja vissza. Az + operátor összefűzés helyett összefűződik, ha a megadott adattípusok egész számok.

Adattípus-konverziós viselkedések

Bizonyos implicit és explicit adattípus-átalakítások nem támogatottak, ha az egyik SQL Server-objektum adattípusát egy másikra konvertálja. Az nchar érték például nem konvertálható képértékké . Az nchar csak explicit átalakítással konvertálható binárissá . A binárisra való implicit átalakítás nem támogatott. Az ncharok azonban explicit módon vagy implicit módon nvarcharvá alakíthatók.

Az alábbi cikkek a megfelelő adattípusok által mutatott konverziós viselkedéseket ismertetik:

Adattípusok konvertálása az OLE Automation tárolt eljárásaival

Mivel az SQL Server Transact-SQL adattípusokat használ, és az OLE Automation Visual Basic adattípusokat használ, az OLE Automation tárolt eljárásainak konvertálnia kell a közöttük áthaladó adatokat.

Az alábbi táblázat az SQL Server Visual Basic-adattípus-átalakításokat ismerteti.

SQL Server-adattípus Visual Basic adattípus
karakter, varchar, szöveg, nvarchar, ntext String
tizedes, numerikus String
bit Boolean
bináris, varbinary, kép Egydimenziós Byte() tömb
int Long
smallint Integer
tinyint Byte
float Double
real Single
pénz, smallmoney Currency
dátumidő, kisdátumidő Date
Bármi, ami a következőre van állítva: NULL A variant értéke Null

A rendszer az összes SQL Server-értéket egyetlen Visual Basic-értékké alakítja, kivéve a bináris, a varbináris és a képértékeket . Ezek az értékek egydimenziós Byte() tömbökké alakulnak a Visual Basicben. Ez a tömb olyan tartományt Byte( 0 to length 1) tartalmaz, ahol a hossz az SQL Server bináris, varbináris vagy képértékeinek bájtjainak száma.

Ezek a Visual Basic-adattípusokból SQL Server-adattípusokra való átalakítások.

Visual Basic adattípus SQL Server-adattípus
Hosszú, Egész szám, Bájt, Logikai, Objektum int
Dupla, Egyes float
Currency money
Date datetime
Legfeljebb 4000 karakter hosszúságú karakterlánc Varchar/nvarchar
4000 karakternél hosszabb karakterlánc SMS/ntext
Legalább 8000 bájtos egydimenziós Byte() tömb varbinary
Több mint 8000 bájtos egydimenziós Byte() tömb image