Aracılığıyla paylaş


Veri türü dönüştürme (Veritabanı Altyapısı)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Veri türleri aşağıdaki senaryolarda dönüştürülebilir:

  • Bir nesnedeki veriler başka bir nesneye taşındığında, verilerle karşılaştırıldığında veya başka bir nesnedeki verilerle birleştirildiğinde, verilerin bir nesnenin veri türünden diğerinin veri türüne dönüştürülmesi gerekebilir.
  • Transact-SQL sonuç sütunundaki, dönüş kodundaki veya çıkış parametresindeki veriler bir program değişkenine taşındığında, verilerin SQL Server sistem veri türünden değişkenin veri türüne dönüştürülmesi gerekir.

Bir uygulama değişkeni ile SQL Server sonuç kümesi sütunu, dönüş kodu, parametre veya parametre işaretçisi arasında dönüştürme yaptığınızda, desteklenen veri türü dönüştürmeleri veritabanı API'si tarafından tanımlanır.

Örtük ve açık dönüştürme

Veri türleri örtük veya açıkça dönüştürülebilir.

Örtük dönüştürmeler kullanıcıya görünmez. SQL Server, verileri otomatik olarak bir veri türünden diğerine dönüştürür. Örneğin, bir smallint bir int ile karşılaştırıldığında, karşılaştırma devam etmeden önce smallint örtük olarak int'e dönüştürülür.

GETDATE() örtük olarak tarih stiline0 dönüştürür. SYSDATETIME() örtük olarak tarih stiline 21dönüştürür.

Açık dönüştürmeler veya CAST işlevlerini kullanırCONVERT.

CAST ve CONVERT işlevleri bir değeri (yerel değişken, sütun veya başka bir ifade) bir veri türünden diğerine dönüştürür. Örneğin, aşağıdaki CAST işlev sayısal değerini $157.27 öğesinin karakter dizesine '157.27'dönüştürür:

CAST ( $157.27 AS VARCHAR(10) )  

Transact-SQL program kodunun CAST ISO ile uyumlu olmasını istiyorsanız yerine kullanınCONVERT. içindeki stil işlevselliğinden CONVERTyararlanmak için yerine CAST kullanınCONVERT.

Aşağıdaki çizimde, SQL Server sistem tarafından sağlanan veri türleri için izin verilen tüm açık ve örtük veri türü dönüştürmeleri gösterilmektedir. Bunlar xml, bigint ve sql_variant içerir. sql_variant veri türünden atamada örtük dönüştürme yoktur, ancak sql_variant örtük dönüştürme vardır.

Satır ve sütunlardaki tüm SQL veri türlerini içeren ve hangi tür veri türü dönüştürmelerinin mümkün olduğunu gösteren ayrıntılı tablo.

Önceki grafik, SQL Server'da izin verilen tüm açık ve örtük dönüştürmeleri gösterse de, dönüştürmenin sonuçta elde edilen veri türünü göstermez.

  • SQL Server açık bir dönüştürme gerçekleştirdiğinde, sonuçta elde edilen veri türünü deyiminin kendisi belirler.
  • Örtük dönüştürmeler için, bir değişkenin değerini ayarlama veya sütuna değer ekleme gibi atama deyimleri, değişken bildirimi veya sütun tanımı tarafından tanımlanan veri türüyle sonuçlanır.
  • Karşılaştırma işleçleri veya diğer ifadeler için, sonuçta elde edilen veri türü veri türü önceliği kurallarına bağlıdır.

Örneğin, aşağıdaki betik varchar türünde bir değişken tanımlar, değişkene bir int türü değeri atar, ardından değişkenin bir dizeyle birleştirilmiş birleştirmesini seçer.

DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'

int değeri 1bir varchar'a dönüştürülür, bu nedenle SELECT deyimi değerini 1 is a string.döndürür.

Aşağıdaki örnekte bunun yerine int değişkenine sahip benzer bir betik gösterilmektedir:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'

Bu durumda, SELECT deyimi aşağıdaki hatayı atar:

Msg 245, Level 16, State 1, Line 3 Conversion failed when converting the varchar value ' is not a string.' to data type int.

ifadesini @notastring + ' is not a string.'değerlendirmek için SQL Server, ifadenin sonucu hesaplanmadan önce örtük dönüştürmeyi tamamlamak için veri türü önceliği kurallarına uyar. int, varchar değerinden daha yüksek bir önceliğe sahip olduğundan, SQL Server dizeyi tamsayıya dönüştürmeyi dener ve bu dize tamsayıya dönüştürülemediğinden başarısız olur. İfade dönüştürülebilecek bir dize sağlarsa, aşağıdaki örnekte olduğu gibi deyimi başarılı olur:

DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'

Bu durumda, dize 1 tamsayı değerine 1dönüştürülebilir, bu nedenle bu SELECT deyim değerini 2döndürür. Sağlanan + veri türleri tamsayı olduğunda işleç birleştirme yerine toplamaya dönüşür.

Veri türü dönüştürme davranışları

Bir SQL Server nesnesinin veri türünü başka bir SQL Server nesnesine dönüştürürken bazı örtük ve açık veri türü dönüştürmeleri desteklenmez. Örneğin, nchar değeri görüntü değerine dönüştürülemez. Nchar yalnızca açık dönüştürme kullanılarak ikiliye dönüştürülebilir. İkili dosyaya örtük dönüştürme desteklenmez. Ancak, bir nchar açıkça veya örtük olarak nvarchar'a dönüştürülebilir.

Aşağıdaki makalelerde, ilgili veri türleri tarafından sergilenen dönüştürme davranışları açıklanmaktadır:

OLE Otomasyonu saklı yordamlarını kullanarak veri türlerini dönüştürme

SQL Server Transact-SQL veri türlerini kullandığından ve OLE Otomasyonu Visual Basic veri türlerini kullandığından, OLE Otomasyonu saklı yordamlarının aralarından geçen verileri dönüştürmesi gerekir.

Aşağıdaki tabloda SQL Server'ın Visual Basic veri türü dönüştürmeleri açıklanmaktadır.

SQL Server veri türü Visual Basic veri türü
char, varchar, metin, nvarchar, ntext String
ondalık, sayısal String
bit Boolean
ikili, varbinary, görüntü Tek boyutlu Byte() dizi
int Long
smallint Integer
tinyint Byte
float Double
real Single
para, smallmoney Currency
tarih zamanı, küçük tarih saati Date
Ayarlı her şey NULL Değişken Null olarak ayarlanmış

İkili, varbinary ve görüntü değerleri dışında tüm tek bir SQL Server değerleri tek bir Visual Basic değerine dönüştürülür. Bu değerler Visual Basic'te tek boyutlu Byte() bir diziye dönüştürülür. Bu dizide Byte( 0 to length 1)uzunluk , SQL Server ikili, varbinary veya görüntü değerlerindeki bayt sayısıdır.

Bunlar Visual Basic veri türlerinden SQL Server veri türlerine dönüştürmelerdir.

Visual Basic veri türü SQL Server veri türü
Uzun, Tamsayı, Bayt, Boole, Nesne int
Çift, Tekli float
Currency money
Date datetime
4.000 veya daha az karakter içeren dize varchar/nvarchar
4.000'den fazla karakter içeren dize Metin/ntext
8.000 bayt veya daha az olan tek boyutlu Byte() dizi varbinary
8.000 bayttan fazla olan tek boyutlu Byte() dizi image