Udostępnij za pomocą


Konwersja typu danych (aparat bazy danych)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza 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.

Szczegółowa tabela zawierająca wszystkie typy danych SQL w wierszach i kolumnach wskazująca, które typy konwersji typów danych są możliwe.

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:

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