Aracılığıyla paylaş


Dönüştürmeleri c sql

Bu konuda gelen c türleri dönüştürürken dikkate alınacak konulara listeler SQL ServerTarih/saat türleri.

Aşağıdaki tabloda açıklanan dönüşümleri istemcide yapılan dönüşüm uygulanır. Burada istemci belirtir sunucuda tanımlı 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ürecektir ne zaman SQLExecuteya SQLExecuteDirectdenir. Oysa, bir hata, odbc herhangi bir kesilme Kesirli saniye özellikle kaldırılıp davranır SQL Serverdavranış yuvarlak olmaktır; dan gittiğinizde, yuvarlama olmaz datetime2(6)için datetime2(2). Datetime sütun değerleri yuvarlak 1/300 saniye ve smalldatetime sütunlarınızın saniye sunucu tarafından sıfır olarak ayarlayın.

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_SS_TIME2

-

1,3

1,10

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_SS_TIMESTAMPOFFSET

1,2,8

1,3,4,8

1,4,8,10

1,8,10

1,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

Semboller için anahtar

Simge

Anlamı

-

Dönüştürme desteklenir. Tanılama kaydı sqlstate 07006 ve "yasak veri türü özniteliği ihlali" iletisi oluşturulur.

1

Sağlanan veri geçerli değilse, 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 "Fractional kesilmesi" iletisi ile oluşturulur.

3

Kesirli saniye sıfır olmalı veya tanılama kaydı sqlstate 22008 ve "Fractional kesilmesi" iletisi ile oluşturulur.

4

Tarih bileşeni yok sayılır.

5

The timezone istemcinin dilimimi ayarına ayarlanır.

6

Süre sıfır olarak ayarlanır.

7

Tarihi geçerli tarih olarak ayarlanır.

8

İstemcinin dilimimi UTC'ye dönüştürülür. Bu dönüştürme sırasında bir hata meydana gelirse, sqlstate 22008 ve "Tarih Saat alanı taşması" iletisi ile tanılama kaydı oluşturulur.

9

Dize ayrıştırılmış ve Tarih, datetime, datetimeoffset veya karşılaşılan ilk noktalama karakteri ve kalan bileşenleri varlığına bağlı zaman değeri dönüştürülür. Dize daha sonra bu işlem tarafından keşfedilen kaynak türü için yukarıdaki tabloda kuralları aşağıdaki hedef türü dönüştürülür. Veri ayrıştırılırken bir hata algılanırsa, sqlstate 22018 ve "ınvalid character value for cast specification" iletisi ile tanılama kaydı oluşturulur. Bu türleri tarafından desteklenen aralığın dışında yıl ise, datetime ve smalldatetime parametreleri, sqlstate 22007 ve "geçersiz bir datetime biçimi" iletisi ile tanılama kaydı oluşturulur.

Hiçbir değişme-e doğru utc isteniyorsa bile datetimeoffset için dönüşüm için utc, sonra aralığında değeri olmalıdır. Bunun nedeni o zaman istemci doğrulaması gerekiyor bu yüzden tds ve sunucu her zaman datetimeoffset değerleri zaman utc için normale bileşenleridir sonra utc dönüştürme desteklenen aralığın içinde. Değeri desteklenen utc aralığında ise, 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 "Geçersiz Saat biçimi" iletisi ile tanılama kaydı oluşturulur. Değeri ile sunucu tarafından kullanılan utc aralığını temsil aralığın dışında kalırsa da bu hata oluşur.

11

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

12

Verinin bayt uzunluğu 4 ya da 8 ise, 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, verileri datetime2 tds biçimine dönüştürülür.

13

Kesme ile veri kaybı oluşursa, sqlstate 22001 ve doğru kesilir "String veri," iletisi ile tanılama kaydı oluşturulur.

Kesirli saniye basamak (ölçek), hedef sütunun boyutu aşağıdaki tabloya göre belirlenir:

TürZımni ölçek0Zımni ölçek1..9
SQL_C_TYPE_TIMESTAMP1921..29

Ancak, eğer ile veri kaybı olmadan üç basamak Kesirli saniye temsil ve sütun boyutu 23 ya da büyük SQL_C_TYPE_TIMESTAMP sonra tam üç Kesirli saniye için basamak oluşturulur. Bu davranış, geriye doğru uyumluluk için eski odbc sürücülerini kullanarak geliştirilen uygulamaları sağlar.

Tablo aralığı daha büyük sütun boyutlarını bir ölçek 9 açık. Bu dönüşüm için odbc tarafından izin verilen en fazla dokuz Kesirli saniye basamak için izin vermelisiniz.

Sınırsız boyutu için değişken uzunlukta karakter türlerini ODBC sütun boyutu sıfır ima (9 basamak, SQL_C_TYPE_TIMESTAMP için 3 haneli kuralın uygulandığı sürece). Sütun boyutu sıfır ile sabit uzunlukta karakter türünü belirten bir hatadır.

Yok

Mevcut SQL Server 2005ve önceki davranış korunur.

Ayrıca bkz.

Kavramlar

Tarih/Saat (odbc) geliştirmeleri