Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Typy danych można konwertować w następujących scenariuszach:
- Gdy dane z jednego obiektu są przenoszone do, w porównaniu z danymi z innego obiektu lub w połączeniu z nimi, dane mogą być konwertowane z typu danych jednego obiektu na typ danych drugiego.
- Gdy dane z kolumny wyników Transact-SQL, kodu zwracanego lub parametru wyjściowego są przenoszone do zmiennej programowej, dane muszą zostać przekonwertowane z typu danych systemowych programu SQL Server na typ danych zmiennej.
Podczas konwertowania między zmienną aplikacji a kolumną zestawu wyników programu SQL Server, kodem zwracanym, parametrem lub znacznikiem parametru obsługiwane konwersje typów danych są definiowane przez interfejs API bazy danych.
Niejawna i jawna konwersja
Typy danych można konwertować niejawnie lub jawnie.
Niejawne konwersje nie są widoczne dla użytkownika. Program SQL Server automatycznie konwertuje dane z jednego typu danych na inny. Na przykład, gdy smallint jest porównywany z int, smallint jest niejawnie konwertowany na int przed kontynuowaniem porównania.
GETDATE() niejawnie konwertuje na styl0 daty.
SYSDATETIME() niejawnie konwertuje na styl 21daty .
Konwersje jawne używają CAST funkcji or CONVERT .
Funkcje CAST i CONVERT konwertują wartość (zmienną lokalną, kolumnę lub inne wyrażenie) z jednego typu danych na inny. Na przykład następująca CAST funkcja konwertuje wartość $157.27 liczbową na ciąg znaków :'157.27'
CAST ( $157.27 AS VARCHAR(10) )
Użyj CAST zamiast CONVERT , jeśli chcesz, aby kod programu Transact-SQL był zgodny z normą ISO.
CONVERT Zamiast CAST korzystać z funkcji stylu w programie CONVERT.
Na poniższej ilustracji przedstawiono wszystkie jawne i niejawne konwersje typów danych, które są dozwolone dla typów danych dostarczonych przez system programu SQL Server. Obejmują one pliki XML, bigint i sql_variant. Nie ma niejawnej konwersji przy przypisaniu z typu danych sql_variant , ale istnieje niejawna konwersja na sql_variant.
Chociaż poprzedni wykres ilustruje wszystkie jawne i niejawne konwersje, które są dozwolone w programie SQL Server, nie wskazuje wynikowego typu danych konwersji.
- Gdy program SQL Server wykonuje jawną konwersję, sama instrukcja określa wynikowy typ danych.
- W przypadku niejawnych konwersji instrukcje przypisania, takie jak ustawienie wartości zmiennej lub wstawianie wartości do kolumny powoduje typ danych zdefiniowany przez deklarację zmiennej lub definicję kolumny.
- W przypadku operatorów porównania lub innych wyrażeń wynikowy typ danych zależy od reguł pierwszeństwa typu danych.
Na przykład poniższy skrypt definiuje zmienną typu varchar, przypisuje wartość typu int do zmiennej, a następnie wybiera łączenie zmiennej z ciągiem.
DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'
Wartość 1 klasy jest konwertowana na wartość varchar, więc SELECT instrukcja zwraca wartość 1 is a string..
W poniższym przykładzie pokazano podobny skrypt ze zmienną int :
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'
W takim przypadku instrukcja SELECT zgłasza następujący błąd:
Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.
Aby ocenić wyrażenie @notastring + ' is not a string.', program SQL Server jest zgodny z regułami pierwszeństwa typu danych, aby ukończyć niejawną konwersję, zanim będzie można obliczyć wynik wyrażenia. Ponieważ int ma wyższy priorytet niż varchar, program SQL Server próbuje przekonwertować ciąg na liczbę całkowitą i kończy się niepowodzeniem, ponieważ nie można przekonwertować tego ciągu na liczbę całkowitą. Jeśli wyrażenie zawiera ciąg, który można przekonwertować, instrukcja powiedzie się, jak w poniższym przykładzie:
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'
W takim przypadku ciąg 1 można przekonwertować na wartość 1całkowitą , więc ta SELECT instrukcja zwraca wartość 2. Operator + staje się dodawaniem, a nie łączeniem, gdy podane typy danych są liczbami całkowitymi.
Zachowania konwersji typów danych
Niektóre niejawne i jawne konwersje typów danych nie są obsługiwane podczas konwertowania typu danych jednego obiektu programu SQL Server na inny. Na przykład nie można przekonwertować wartości nchar na wartość obrazu . Nchar można przekonwertować tylko na plik binarny przy użyciu jawnej konwersji. Niejawna konwersja na dane binarne nie jest obsługiwana. Jednak nchar może być jawnie lub niejawnie przekonwertowany na nvarchar.
W poniższych artykułach opisano zachowania konwersji wykazywane przez odpowiadające im typy danych:
- binarne i varbinary
- datetime2
- pieniądze i małamoney
- bit
- datetimeoffset
- smalldatetime
- char i varchar
- dziesiętne i liczbowe
- sql_variant
- date
- liczba zmiennoprzecinkowa i rzeczywista
- time
- datetime
- int, bigint, smallint i tinyint
- uniqueidentifier
- xml
- json
Konwertowanie typów danych przy użyciu procedur składowanych automatyzacji OLE
Ponieważ program SQL Server używa Transact-SQL typów danych, a automatyzacja OLE używa typów danych języka Visual Basic, procedury składowane automatyzacji OLE muszą konwertować dane, które przechodzą między nimi.
W poniższej tabeli opisano konwersje typów danych programu SQL Server na Visual Basic.
| Typ danych programu SQL Server | Typ danych języka Visual Basic |
|---|---|
| char, varchar, text, nvarchar, ntext | String |
| Dziesiętny, numeryczny | String |
| bit | Boolean |
| binarny, varbinary, obraz | Tablica jednowymiarowa Byte() |
| int | Long |
| smallint | Integer |
| tinyint | Byte |
| float | Double |
| real | Single |
| money, smallmoney | Currency |
| randka,mała randkagodzina | Date |
Wszystko ustawione na NULL |
Wariant ustawiony na wartość Null |
Wszystkie pojedyncze wartości programu SQL Server są konwertowane na pojedynczą wartość języka Visual Basic z wyjątkiem wartości binarnych, varbinary i obrazów . Te wartości są konwertowane na tablicę jednowymiarową Byte() w Visual Basic. Ta tablica ma zakres Byte( 0 to length 1) , w którym długość to liczba bajtów w wartościach binarnych, varbinary lub obrazów programu SQL Server.
Są to konwersje typów danych języka Visual Basic na typy danych programu SQL Server.
| Typ danych języka Visual Basic | Typ danych programu SQL Server |
|---|---|
| długi, całkowity, bajt, booleański, obiekt | int |
| Podwójne, pojedyncze | float |
| Currency | money |
| Date | datetime |
| Ciąg z co najmniej 4000 znakami | varchar/nvarchar |
| Ciąg z więcej niż 4000 znakami | Tekst/ntekst |
Tablica jednowymiarowa Byte() z 8000 bajtami lub mniejszą |
varbinary |
Tablica jednowymiarowa Byte() z ponad 8000 bajtami |
image |