Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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.
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:
- bináris és varbináris
- datetime2
- pénz és kismamák
- bit
- datetimeoffset
- smalldatetime
- karakter és varchar
- decimális és numerikus
- sql_variant
- date
- lebegőpontos és valós
- time
- datetime
- int, bigint, smallint és tinyint
- uniqueidentifier
- xml
- json
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 |