Metadata - Parameter och resultat

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Detta ämne beskriver vad som returneras i fälten för implementeringsparameterbeskrivare (IPD) och implementeringsradbeskrivare (IRD) för datum- och tidsdatatyper.

Information som returneras i IPD-fält

Följande information returneras i IPD-fälten:

Parametertyp date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
SQL_DESC_DATETIME_INTERVAL_PRECISION 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_TYPE SQL_TYPE_DATE SQL_SS_TYPE_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET
SQL_DESC_TYPE_NAME date time smalldatetime i IRD, datetime2 i IPD datumtid i IRD, datumtid2 i IPD datetime2 datetimeoffset
SQL_CA_SS_VARIANT_TYPE SQL_C_TYPE_DATE SQL_C_TYPE_BINARY SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_BINARY
SQL_CA_SS_VARIANT_SQL_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_CA_SS_SERVER_TYPE N/A N/A SQL_SS_TYPE_SMALLDATETIME SQL_SS_TYPE_DATETIME SQL_SS_TYPE_DEFAULT N/A

Ibland finns det diskontinuiteter i värdeintervallen. Till exempel saknas 9 i 8,10..16. Detta beror på att en decimalpunkt läggs till när bråkprecisionen är större än noll.

datetime2 returneras som typnamn för smalldatetime och datetime eftersom drivrutinen använder detta som en gemensam typ för att överföra alla SQL_TYPE_TIMESTAMP värden till servern.

SQL_CA_SS_VARIANT_SQL_TYPE är ett nytt beskrivande fält. Detta fält lades till i IRD och IPD för att göra det möjligt för applikationer att specificera värdetypen associerad med sqlvariant (SQL_SSVARIANT) kolumner och parametrar

SQL_CA_SS_SERVER_TYPE är ett nytt IPD-enbart fält som gör det möjligt för applikationer att kontrollera hur värden för parametrar bundna när SQL_TYPE_TYPETIMESTAMP (eller som SQL_SS_VARIANT med en C-typ SQL_C_TYPE_TIMESTAMP) skickas till servern. Om SQL_DESC_CONCISE_TYPE är SQL_TYPE_TIMESTAMP (eller är SQL_SS_VARIANT och C-typen är SQL_C_TYPE_TIMESTAMP) när SQLExecute eller SQLExecDirect anropas, bestämmer värdet av SQL_CA_SS_SERVER_TYPE den tabellariska dataströmstypen (TDS) för parametervärdet, enligt följande:

Värdet av SQL_CA_SS_SERVER_TYPE Giltiga värden för SQL_DESC_PRECISION Giltiga värden för SQL_DESC_LENGTH TDS-typ
SQL_SS_TYPE_DEFAULT 0..7 19, 21..27 datetime2
SQL_SS_TYPE_SMALLDATETIME 0 19 smalldatetime
SQL_SS_TYPE_DATETIME 3 23 datetime

Standardinställningen för SQL_CA_SS_SERVER_TYPE är SQL_SS_TYPE_DEFAULT. Inställningarna för SQL_DESC_PRECISION och SQL_DESC_LENGTH valideras med inställningen SQL_CA_SS_SERVER_TYPE som beskrivs i tabellen ovan. Om denna validering misslyckas returneras SQL_ERROR och en diagnostisk post loggas med SQLState 07006 och meddelandet "Restricted data type attribute violation". Detta fel returneras också om SQL_CA_SS_SERVER_TYPE är satt till ett annat värde än SQL_SS_TYPE DEFAULT och DESC_CONCISE_TYPE inte är SQL_TYPE_TIMESTAMP. Dessa valideringar utförs när beskrivande konsistensvalidering sker, till exempel:

  • När SQL_DESC_DATA_PTR ändras.

  • Vid förberedelse- eller exekveringstider (när SQLExecute, SQLExecDirect, SQLSetPos eller SQLBulkOperations anropas).

  • När en applikation tvingar fram en icke-uppskjuten förberedelse genom att anropa SQLPrepare med deferred prepare inaktiverat, eller genom att anropa SQLNumResultCols, SQLDescribeCol eller SQLDescribeParam för en sats som är förberedd men inte exekverad.

När SQL_CA_SS_SERVER_TYPE sätts av ett anrop till SQLSetDescField måste dess värde vara SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME eller SQL_SS_TYPE_DATETIME. Om så inte är fallet returneras SQL_ERROR och en diagnostisk post loggas med SQLState HY092 och meddelandet "Invalid attribute/option identifier".

Attributet SQL_CA_SS_SERVER_TYPE kan användas av applikationer som är beroende av funktionalitet som stöds av datetime och smalldatetime, men inte datetime2. Till exempel kräver datetime2 användning av dateadd- och datediif-funktionerna , medan datetime och smalldatetime också tillåter aritmetiska operatorer. De flesta applikationer behöver inte använda denna egenskap och dess användning bör undvikas.

Information som återlämnas i IRD-fält

Följande information återges i IRD-fälten:

Kolumntyp date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_AUTO_UNIQUE_VALUE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
SQL_DESC_DATETIME_INTERVAL_PRECISION 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_DISPLAY_SIZE 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 2 19, 21..27 26, 28..34
SQL_DESC_LITERAL_PREFIX ' ' ' ' ' '
SQL_DESC_LITERAL_SUFFIX ' ' ' ' ' '
SQL_DESC_LOCAL_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE
SQL_DESC_TYPE SQL_DATETIME SQL_SS_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET
SQL_DESC_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_UNSIGNED SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE

Se även

Metadata (ODBC)