Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Integracija podatkov in dostop do podatkov » Gonilnik WKL OData ODBC » Referenčni priročnik gonilnika OData ODBC » Ubežne klavzule in podatkovni tipi

Ubežne klavzule in podatkovni tipi

Katere ubežne klavzule ODBC gonilnik razume v stavku in s katerim podatkovnim tipom SQL aplikaciji javi vsak stolpec storitve. To stran potrebujete, ko stavek z {d …}, {ts …} ali {fn …} ne deluje po pričakovanjih ali ko aplikacija prikaže drug tip, drugo dolžino ali drugo ime tipa kot prek gonilnika ODBC SQL Serverja.

Specifikacija ODBC ubežne klavzule opisuje kot od proizvajalca neodvisen zapis literalov, funkcij in spojev (Microsoft: Escape Sequences in ODBC). Gonilniku ni treba podpirati vseh; spodnja tabela navaja, kaj ta gonilnik prevede sam.

Ubežne klavzule

KlavzulaVedenje
{d 'yyyy-mm-dd'}datum. Samo natanko ta oblika; drugo besedilo se zavrne
{t 'hh:mm:ss'}ura. Samo natanko ta oblika
{ts 'yyyy-mm-dd hh:mm:ss[.f]'}časovna točka z do sedmimi decimalnimi mesti. Samo natanko ta oblika
{guid '…'}identifikator (uniqueidentifier, Edm.Guid)
LIKE … {escape 'x'} in LIKE … ESCAPE 'x'ubežni znak za % in _ v vzorcu; nato veljajo pravila za LIKE pod Podprti SQL
{call p(…)}, {? = call p(…)} (klic procedure)prevedeno v EXEC p … in poslano na naslov za lastne stavke. Označba mesta pred enačajem prejme vrnjeno vrednost; označba mesta, ki jo aplikacija veže kot izhodno, dobi OUTPUT; prazen argument ({call p(?,,?)}) postane DEFAULT. Brez naslova za lastne stavke gonilnik klic zavrne z 42000
{fn …} (skalarne funkcije), {oj …} (zunanji spoj) in vsaka druga klavzulani prevedeno. Z naslovom za lastne stavke se stavek nespremenjen pošlje podatkovni zbirki, njen strežnik pa odloči, ali klavzulo razume; brez naslova jo gonilnik zavrne z 42000

Vrednost, ki se ne ujema s klavzulo ({d '01.06.2023'}, {ts '06/01/2023'}), naredi stavek neprevedljiv: z naslovom za lastne stavke se pošlje nespremenjen podatkovni zbirki, brez njega pa se zavrne z 42000 in sporočilom, ki navaja klavzulo in vrednost. Gonilnik vrednosti ne razlaga sam, ker bi ugibanje – najprej dan ali mesec – brez kakršnega koli opozorila dala drugo množico vrstic.

GUID kot besedilo. Kjer je podano za stolpec GUID besedilo – kot niz v stavku ali kot vezana besedilna vrednost –, gonilnik sprejme preprosto obliko, obliko z zavitimi oklepaji in obliko, ki jo zapiše Access sam ({guid {33333333-…}}). Vezana vrednost je lahko tudi GUID (SQL_C_GUID) ali 16 bajtov (SQL_C_BINARY); tako Access veže ključ povezane tabele pri ponovnem nalaganju, spreminjanju in brisanju.

Podatkovni tipi

Storitev vsak stolpec opiše s tipom OData (Edm.…) in, kjer ga navaja, z imenom tipa podatkovne zbirke (Store.Type, glejte Zahteve za storitev OData). Iz tega gonilnik aplikaciji javi tip SQL ODBC, dolžino in ime tipa:

Tip storitveTip SQL (ODBC 3)Ime tipaDolžina oziroma natančnost
Edm.String z dolžino do 4.000SQL_WVARCHARnvarchardolžina storitve
Edm.String z dolžino do 4.000 in Store.Type ncharSQL_WCHARnchardolžina storitve
Edm.String z dolžino do 8.000 in Store.Type varchar oziroma charSQL_VARCHAR oziroma SQL_CHARvarchar oziroma chardolžina storitve
Edm.String brez dolžine ali daljšiSQL_WLONGVARCHARntext; pri Store.Type nvarchar (torej (max)) nvarchar1.073.741.823
Edm.String s Store.Type varchar brez dolžine (torej (max)) oziroma textSQL_LONGVARCHARvarchar oziroma text2.147.483.647
Edm.String s Store.Type xmlSQL_SS_XML (-152)xml0
Edm.String s Store.Type sql_variantSQL_SS_VARIANT (-150)sql_variant8.000
Edm.BooleanSQL_BITbit1
Edm.ByteSQL_TINYINTtinyint3
Edm.SByte, Edm.Int16SQL_SMALLINTsmallint5
Edm.Int32SQL_INTEGERint10
Edm.Int64SQL_BIGINTbigint19
Edm.DecimalSQL_DECIMAL; pri Store.Type numeric SQL_NUMERICdecimal oziroma numeric; pri Store.Type money/smallmoney to imenatančnost in decimalna mesta storitve, brez navedbe 38 in 0
Edm.SingleSQL_REALreal24 bitov
Edm.DoubleSQL_DOUBLE; pri Store.Type float SQL_FLOATfloat53 bitov
Edm.DateSQL_TYPE_DATEdate10
Edm.TimeOfDaySQL_TYPE_TIME; pri Store.Type time SQL_SS_TIME2 (-154)time8 oziroma 9 + decimalna mesta
Edm.DateTimeOffsetSQL_TYPE_TIMESTAMPdatetime; pri Store.Type datetime2 oziroma smalldatetime to ime19 oziroma 20 + decimalna mesta (privzeto 3, največ 7); smalldatetime 16
Edm.DateTimeOffset s Store.Type datetimeoffsetSQL_SS_TIMESTAMPOFFSET (-155)datetimeoffset26 oziroma 27 + decimalna mesta
Edm.GuidSQL_GUIDuniqueidentifier36
Edm.Binary z dolžino do 8.000SQL_VARBINARY; pri Store.Type binary SQL_BINARYvarbinary oziroma binarydolžina storitve
Edm.Binary kot različica vrstice (Store.Type timestamp/rowversion)SQL_BINARYtimestamp8
Edm.Binary brez dolžine ali daljšiSQL_LONGVARBINARYimage; pri Store.Type varbinary (torej (max)) varbinary1.073.741.823
Edm.Binary s Store.Type hierarchyid, geography oziroma geometrySQL_SS_UDT (-151)v katalogu to ime, v rezultatu udthierarchyid 892, sicer 0
vsak drug tip––stolpec ni ponujen

Stolpec, ki ga storitev oštevilči sama, ima ime tipa z dodatkom identity (int identity), kot pri gonilniku SQL Serverja; Access iz tega ustvari polje tipa samoštevilo („AutoNumber“).

Zakaj tako. Odločitve in njihovi razlogi:

DoločitevRazlog
Besedilo kot Unicode (SQL_W…), razen če ga podatkovna zbirka hrani ozko (Store.Type varchar, char, text)OData besedilo prenaša kot niz JSON. Ozek tip bi vsako aplikacijo prisilil v pretvorbo prek kodne strani, ki ne more prikazati vsakega znaka storitve. Ozko shranjen stolpec vsebuje samo znake svoje kodne strani; ODBC Driver 18 ga opiše kot ozkega
Neomejeno besedilo kot SQL_WLONGVARCHARAccess samo iz tega ustvari polje z dolgim besedilom. Gonilnik SQL Serverja nvarchar(max) javi kot SQL_WVARCHAR z dolžino 0; aplikacija, ki medpomnilnike odmeri po dolžini, bi 0 prebrala kot „prazno“
Edm.DateTimeOffset kot časovna točka brez pasu, v koordiniranem univerzalnem časuČasovna točka ODBC nima pasu. Storitev, ki čas stenske ure brez pasu zapiše z Z (tako podatkovni prehod Wkl.Data.Gateway), dobi svojo shranjeno uro nespremenjeno nazaj; vrednost s pravim pasom se preračuna, tako da se primerjata dve časovni točki. Izjema je Store.Type datetimeoffset: stolpec ohrani svoj zamik, kot pri ODBC Driver 18
Imena tipov podatkovne zbirke, kjer je tip ODBC istiODBC Driver 18 javi datetime2 in tipe (max) z njihovimi osnovnimi imeni. Aplikacije ta imena prikazujejo (ADO.NET GetDataTypeName, tabele sheme)
Lastni tipi gonilnika SQL Serverja za time, datetimeoffset, xml, sql_variant in tipe CLRAplikacija, ki te tipe pozna, dobi isto kot od ODBC Driver 18. Access jih ne pozna in take stolpce z obema gonilnikoma prikaže kot besedilo z 255 znaki: uro z deli sekunde, časovno točko z zamikom. Če bi bila opisana kot navadna časovna točka, bi ura kazala današnji datum, časovna točka pa bi izgubila zamik
Plavajoča vejica z natančnostjo v bitih (24, 53)Tako NUM_PREC_RADIX šteje 2, kot pri gonilniku SQL Serverja

Vrednosti kot besedilo in brez ciljnega tipa. Če aplikacija stolpec s Store.Type bere kot besedilo (SQL_C_CHAR, SQL_C_WCHAR), dobi obliko ODBC Driver 18: decimalnih mest ure ali časovne točke vedno toliko, kolikor jih določa stolpec (00:00:00.0000000 pri time(7), .000 pri datetime), časovno točko z zamikom (2026-10-29 13:45:12.1234567 +02:00) in decimalno število z vsemi decimalnimi mesti in brez ničle pred decimalno piko (-.0000000001, .500). Brez lastnega ciljnega tipa (SQL_C_DEFAULT) gonilnik vrne time in datetimeoffset kot strukturo gonilnika SQL Serverja (SQL_SS_TIME2_STRUCT, 12 bajtov; SQL_SS_TIMESTAMPOFFSET_STRUCT, 20 bajtov), tip CLR kot bajte in sql_variant kot ozko besedilo. Če aplikacija datetimeoffset zahteva kot časovno točko, datum ali uro, ga gonilnik preračuna v krajevni čas računalnika, kot ODBC Driver 18.

Aplikacije ODBC 2. Če se aplikacija prijavi z ODBC 2 (SQL_ATTR_ODBC_VERSION), kot to stori Access, gonilnik datum, uro in časovno točko navede s številkami ODBC 2 (SQL_DATE, SQL_TIME, SQL_TIMESTAMP). Če poizveduje po vrednosti brez lastnega ciljnega tipa (SQL_C_DEFAULT), gonilnik bigint in GUID vrne kot besedilo: ODBC 2 za oba kot privzetega ne pozna lastnega tipa C; za GUID se ODBC Driver 18 vede enako.

Pretvorbe. SQLGetInfo(SQL_CONVERT_FUNCTIONS) ne javi nobene funkcije pretvorbe; CONVERT in CAST ne spadata v prevedeno podmnožico in se izvedeta samo prek naslova za lastne stavke. Za SQL_CONVERT_NUMERIC javi pretvorbo v SQL_NUMERIC, da ADO.NET decimalne vrednosti veže kot število in ne kot besedilo v kulturi računalnika.

Glejte tudi

sl/wiki/data-conectivity/odata-odbc/reference/escape-clauses-and-types.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille