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
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. Nincs implicit átalakítás a sql_variant adattípusból a kirendelésnél, de van implicit átalakítás sql_variant-re.
Bár az előző diagram bemutatja az összes explicit és implicit átalakítást, amelyek az SQL Server-ben engedélyezettek, nem mutatja meg az átalakítás eredményének 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 AS 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 AS 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 nagyobb előzményekkel rendelkezik, mint a varchar, 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 AS 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
Néhány implicit és explicit adattípus-átalakítás nem támogatott, amikor egy SQL Server objektum adattípusát egy másikra konvertálod. Például egy nchar értéket nem lehet képértékké konvertálni. Az nchar csak explicit átalakítással konvertálható binárissá . A bináris 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
- vector
- geography
- geometry
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 |