Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Datové typy je možné převést v následujících scénářích:
- Když se data z jednoho objektu přesunou, porovná se nebo zkombinují s daty z jiného objektu, může být nutné data převést z datového typu jednoho objektu na datový typ druhého objektu.
- Pokud se data ze sloupce výsledků Transact-SQL, návratový kód nebo výstupní parametr přesunou do proměnné programu, musí být data převedena ze systémového datového typu SQL Serveru na datový typ proměnné.
Při převodu mezi proměnnou aplikace a sloupcem sady výsledků SQL Serveru, návratovým kódem, parametrem nebo značkou parametru jsou podporované převody datových typů definovány rozhraním API databáze.
Implicitní a explicitní převod
Datové typy je možné převést implicitně nebo explicitně.
Implicitní převody nejsou uživateli viditelné. SQL Server automaticky převede data z jednoho datového typu na jiný. Pokud je například malýint porovnán s int, je malýint implicitně převeden na int před zahájením porovnání.
GETDATE() implicitně se převede na styl0 data.
SYSDATETIME() implicitně se převede na styl 21data .
Explicitní převody používají CAST funkce.CONVERT
Funkce CAST a CONVERT převádějí hodnotu (místní proměnnou, sloupec nebo jiný výraz) z jednoho datového typu na jiný. Například následující CAST funkce převede číselnou hodnotu $157.27 na řetězec '157.27'znaků:
CAST ( $157.27 AS VARCHAR(10) )
CAST Místo CONVERT toho, pokud chcete Transact-SQL kód programu, aby byl v souladu se standardem ISO.
CONVERT Místo CAST toho, abyste využili funkce stylu v CONVERT.
Následující obrázek znázorňuje všechny explicitní a implicitní převody datových typů, které jsou povoleny pro systémové datové typy zadané systémem SQL Serveru. Patří sem xml, bigint a sql_variant. U přiřazení z datového typu sql_variant neexistuje implicitní převod, ale implicitní převod na sql_variant.
I když předchozí graf znázorňuje všechny explicitní a implicitní převody, které jsou povoleny v SQL Serveru, nezvýší výsledný datový typ převodu.
- Když SQL Server provede explicitní převod, samotný příkaz určuje výsledný datový typ.
- U implicitních převodů příkazy přiřazení, jako je nastavení hodnoty proměnné nebo vložení hodnoty do sloupce, mají za následek datový typ, který byl definován deklarací proměnné nebo definicí sloupce.
- U relačních operátorů nebo jiných výrazů závisí výsledný datový typ na pravidlech priority datového typu.
Například následující skript definuje proměnnou typu varchar, přiřadí proměnné typu varchar hodnotu typu int proměnné a pak vybere zřetězení proměnné s řetězcem.
DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'
Hodnota int1 je převedena na varchar, takže SELECT příkaz vrátí hodnotu 1 is a string..
Následující příklad ukazuje podobný skript s proměnnou int místo toho:
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'
V tomto případě příkaz SELECT vyvolá následující chybu:
Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.
Aby bylo možné výraz vyhodnotit @notastring + ' is not a string.', SQL Server se řídí pravidly priorit datového typu k dokončení implicitního převodu před výsledkem výrazu lze vypočítat. Protože int má vyšší prioritu než varchar, SQL Server se pokusí převést řetězec na celé číslo a selže, protože tento řetězec nelze převést na celé číslo. Pokud výraz poskytuje řetězec, který lze převést, příkaz bude úspěšný, jako v následujícím příkladu:
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'
V tomto případě lze řetězec 1 převést na celočíselnou hodnotu 1, takže tento SELECT příkaz vrátí hodnotu 2. Operátor + se stane sčítáním, nikoli zřetězením, pokud zadané datové typy jsou celá čísla.
Chování převodu datových typů
Některé implicitní a explicitní převody datových typů nejsou podporovány při převodu datového typu jednoho objektu SQL Serveru na jiný. Například hodnotu nchar nelze převést na hodnotu obrázku . Nchar lze převést pouze na binární pomocí explicitního převodu. Implicitní převod na binární soubor není podporován. Nchar však může být explicitně nebo implicitně převeden na nvarchar.
Následující články popisují chování převodu, které vykazuje jejich odpovídající datové typy:
- binární a varbinární
- datetime2
- peníze a drobné peníze
- bit
- datetimeoffset
- smalldatetime
- char a varchar
- desetinná a číselná
- sql_variant
- date
- float a real
- time
- datetime
- int, bigint, smallint a tinyint
- uniqueidentifier
- xml
- json
Převod datových typů pomocí uložených procedur OLE Automation
Vzhledem k tomu, že SQL Server používá Transact-SQL datových typů a automatizace OLE používá datové typy jazyka Visual Basic, musí uložené procedury OLE převést data, která se mezi nimi předají.
Následující tabulka popisuje převody datových typů sql Serveru do jazyka Visual Basic.
| Datový typ SQL Serveru | Datový typ Jazyka Visual Basic |
|---|---|
| char, varchar, text, nvarchar, ntext | String |
| Desetinné, číselné | String |
| bit | Boolean |
| Binární, varbinární, obraz | Jednorozměrné Byte() pole |
| int | Long |
| smallint | Integer |
| tinyint | Byte |
| float | Double |
| real | Single |
| money, smallmoney | Currency |
| Rande,malérandečas | Date |
Cokoli je nastavené na NULL |
Varianta nastavená na hodnotu Null |
Všechny hodnoty SQL Serveru se převedou na jednu hodnotu jazyka Visual Basic s výjimkou binárních hodnot, varbinary a obrázků . Tyto hodnoty se v jazyce Visual Basic převedou na jednorozměrné Byte() pole. Toto pole má rozsah, ve Byte( 0 to length 1) kterém je délka počtu bajtů v binárním souboru SQL Serveru, varbinary nebo hodnoty obrázků .
Jedná se o převody z datových typů jazyka Visual Basic na datové typy SQL Serveru.
| Datový typ Jazyka Visual Basic | Datový typ SQL Serveru |
|---|---|
| Dlouhé, celočíselné, bajtové, booleovské, objektové | int |
| Dvojitý, jednolůžkový | float |
| Currency | money |
| Date | datetime |
| Řetězec s 4 000 znaky nebo méně | varchar/nvarchar |
| Řetězec s více než 4 000 znaky | Text/ntext |
Jednorozměrné Byte() pole s 8 000 bajty nebo méně |
varbinary |
Jednorozměrné Byte() pole s více než 8 000 bajty |
image |
Související obsah
- Uložené procedury OLE (Transact-SQL)
- CAST a CONVERT (Transact-SQL)
- Datové typy (Transact-SQL)
- COLLATE (Transact-SQL)