Aracılığıyla paylaş


C SQL'e dönüştürme

Bu konu için c tiplerinin dönüştürürken dikkate alınacak konulara listeler SQL Server tarih/saat türleri.

Aşağıda, açıklanan dönüşümleri tablo istemci üzerinde yapılan dönüştürmeler uygulamak.Burada, istemci belirler sunucuda tanımlı belirtilenden farklı bir parametre için kesirli ikinci duyarlık durumlarda, istemci dönüştürme başarılı olabilir, ancak sunucu bir hata döndürür, SQLExecute veya SQLExecuteDirect denir.Özellikle, odbc Kesirli saniye herhangi bir kesme hata olarak, oysa işler SQL Server davranış olduğu için yuvarlak; dan gittiğinizde, yuvarlama yapılmaz datetime2(6) için datetime2(2).DateTime sütun değerlerini 1'e yuvarlak/300th saniye ve smalldatetime saniye sütunlarına sahip küme sunucu tarafından sıfır.

SQL_TYPE_DATE

SQL_TYPE_TIME

SQL_SS_TIME2

SQL_TYPE_TIMESTAMP

SQL_SS_TIMSTAMPOFFSET

SQL_CHAR

SQL_WCHAR

SQL_C_DATE

1

-

-

1,6

1,5,6

1,13

1,13

SQL_C_TIME

-

1

1

1,7

1,5,7

1,13

1,13

SQL_C_BINARY(SQL_SS_TIME2_STRUCT)

Yok

Yok

1,10,11

Yok

Yok

Yok

Yok

SQL_C_TYPE_TIMESTAMP

1,2

1,3,4

1,4,10

1,10

1,5,10

1,13

1,13

SQL_C_BINARY(SQL_SS_TIMESTAMPOFFSET_STRUCT)

Yok

Yok

Yok

Yok

1,10,11

Yok

Yok

sql_c_char/sql_wchar (tarih)

9

9

9

9,6

9,5,6

Yok

Yok

sql_c_char/sql_wchar (time2)

9

9,3

9,10

9,7,10

9,5,7,10

Yok

Yok

sql_c_char/sql_wchar (datetime)

9,2

9,3,4

9,4,10

9,10

9,5,10

Yok

Yok

sql_c_char/sql_wchar (datetimeoffset)

9,2,8

9,3,4,8

9,4,8,10

9,8,10

9,10

Yok

Yok

SQL_C_BINARY(SQL_DATE_STRUCT)

1,11

Yok

Yok

Yok

Yok

Yok

Yok

SQL_C_BINARY(SQL_TIME_STRUCT)

Yok

Yok

Yok

Yok

Yok

Yok

Yok

SQL_C_BINARY(SQL_TIMESTAMP_STRUCT)

Yok

Yok

Yok

Yok

Yok

Yok

Yok

Simge anahtarı

Simge

Anlamı

-

Dönüştürme desteklenir.Tanılama kaydı sqlstate 07006 ve ileti "Yasak veri türü öznitelik ihlali" ile oluşturulur.

1

Sağlanan verilerin geçerli ise, sqlstate 22007 ve "geçersiz bir datetime biçimi" iletisi ile Tanılama kaydı oluşturulur.

2

Saat alanları sıfır olmalı veya tanılama kaydı sqlstate 22008 ve "Tarih saat alan taşması" iletisi ile oluşturulur.

3

Kesirli saniye sıfır olmalı veya tanılama kaydı sqlstate 22008 ve "Tarih saat alan taşması" iletisi ile oluşturulur.

4

Tarih bileşeni yok sayılır.

5

Saat dilimi olan küme için istemcinin timezone kümeting.

6

saat Sıfır olarak küme.

7

Tarihi geçerli tarih olarak küme.

8

Zaman dönüştürülür istemci's için utc saat dilimi.Bu dönüştürme sırasında bir hata ortaya çıkarsa, sqlstate 22008 ve "Tarih saat alan taşması" iletisi ile Tanılama kaydı oluşturulur.

9

Dize ayrıştırılır ve tarih, datetime, datetimeoffset veya ilk noktalama karakteri ile karşılaştı ve kalan bileşenleri varlığını bağlı saat değeri dönüştürülür.Dize daha sonra dönüştürülür hedef türü, bu işlem tarafından keşfedilen kaynak türü için önceki tabloda kurallara.Veri ayrıştırılırken bir hata algılanırsa, sqlstate 22018 ve "Invalid character value for cast specification" iletisi ile Tanılama kaydı oluşturulur.Datetime ve smalldatetime parametrelerinin dışında yıl ise aralık bu türleri tarafından desteklenen, tanılama kaydı sqlstate 22007 ve "geçersiz bir datetime biçimi" iletisi ile oluşturulur.

Dönüştürme için utc istemiş olsanız bile datetimeoffset için değer aralık içinde utc, dönüştürme sonrasında olması gerekir.Bunun nedeni, istemci bu süre doğrulamanız gerekir böylece tds ve sunucu her saat saat datetimeoffset değerleri, utc normalize bileşenleridir içinde aralık utc dönüştürme sonra desteklenen.Değer içinde desteklenen utc ise, aralık, sqlstate 22007 ve "geçersiz bir datetime biçimi" iletisi ile Tanılama kaydı oluşturulur.

10

Kesme ile veri kaybı oluşursa, sqlstate 22008 ve "Tarih saat alan taşması" iletisi ile Tanılama kaydı oluşturulur.Değer sunucu tarafından kullanılan utc aralık tarafından temsil edilebilir aralığın dışında kalırsa, bu hata da oluşur.

11

Verinin bayt uzunluğu sql türü tarafından gerekli yapı boyutunu eşit değil, sqlstate 22003 ve "Sayısal değer aralık dışında" iletisi ile Tanılama kaydı oluşturulur.

12

Verinin bayt uzunluğu 4 veya 8, verileri sunucuya ham tds smalldatetime veya tarih/saat biçiminde gönderilir.Verinin bayt uzunluğu SQL_TIMESTAMP_STRUCT boyutunu tam olarak eşleşiyorsa, veri datetime2 tds biçimine dönüştürülür.

13

Kesme ile veri kaybı oluşursa, sqlstate 22001 ve sağa kesildi "Dizesi veri" iletisi ile Tanılama kaydı oluşturulur.

Kesirli saniye basamak (Ölçek) hedef sütunun boyutuna göre aşağıdaki tarafından belirlenen tablo:

TürÖrtük ölçek0Örtük ölçek1..9
SQL_C_TYPE_TIMESTAMP1921..29

Ancak, veri kaybı olmadan üç basamaklı Kesirli saniye temsil ve 23 veya daha büyük sütun boyutu ise SQL_C_TYPE_TIMESTAMP, sonra tam olarak üç Kesirli saniye için basamak üretilir.Bu davranış, geriye doğru uyumluluk için eski odbc sürücülerini kullanarak geliştirilen uygulamaları sağlar.

Tablo aralık büyük sütun boyutları için 9 ölçeğini de kullanılmış olur.Bu dönüşüm için odbc tarafından izin verilen en fazla dokuz Kesirli saniye basamak kadar izin vermelisiniz.

Değişken uzunlukta karakter türlerini odbc için sınırsız büyüklükte bir sütun boyutu sıfır anlamına gelir (9 basamak, SQL_C_TYPE_TIMESTAMP için 3 basamaklı kuralın uygulandığı sürece).Bir sütun boyutu sıfır ile sabit uzunlukta karakter türünü belirten bir hatadır.

Yok

Var olan SQL Server 2005 ve önceki davranış saklanır.

Ayrıca bkz.

Kavramlar