Läs på engelska

Dela via


Parametrar för Odbc.DataSource

Odbc.DataSource-funktionen tar två parametrar – en connectionString för din drivrutin och en options post som gör att du kan åsidosätta olika drivrutinsbeteenden. Genom alternativposten kan du åsidosätta funktioner och annan information som rapporterats av drivrutinen, kontrollera navigatörens beteende och påverka DE SQL-frågor som genereras av M-motorn.

Fälten för alternativposter som stöds finns i två kategorier– de som är offentliga och alltid tillgängliga, och de som endast är tillgängliga i en utökningskontext.

I följande tabell beskrivs de offentliga fälten i alternativposten.

Fält beskrivning
CommandTimeout Ett varaktighetsvärde som styr hur länge frågan på serversidan tillåts köras innan den avbryts.

Standard: 10 minuter
ConnectionTimeout Ett varaktighetsvärde som styr hur länge du ska vänta innan du överger ett försök att upprätta en anslutning till servern.

Standard: 15 sekunder
CreateNavigationProperties Ett logiskt värde som anger om navigeringsegenskaper ska genereras i de returnerade tabellerna. Navigeringsegenskaper baseras på sekundärnyckelrelationer som rapporterats av drivrutinen. Dessa egenskaper visas som "virtuella" kolumner som kan expanderas i frågeredigeraren, vilket skapar lämplig koppling.

Om beräkning av sekundärnyckelberoenden är en dyr åtgärd för drivrutinen kanske du vill ange värdet falskt.

Standardvärde: "true"
HierarchicalNavigation Ett logiskt värde som anger om tabellerna ska visas grupperade efter deras schemanamn. När värdet är false visas tabeller i en platt lista under varje databas.

Standard: FALSKT
SqlCompatibleWindowsAuth Ett logiskt värde som avgör om du vill skapa en SQL Server-kompatibel anslutningssträng när du använder Windows-autentisering –Trusted_Connection=Yes .

Om drivrutinen stöder Windows-autentisering, men kräver extra eller alternativa inställningar i anslutningssträng, bör du ange värdet till false och använda fältet CredentialConnectionString alternativpost som beskrivs i nästa tabell.

Standardvärde: "true"

I följande tabell beskrivs de alternativpostfält som endast är tillgängliga via utökningsbarhet. Fält som inte är enkla literalvärden beskrivs i senare avsnitt.

Fält beskrivning
AstVisitor En post som innehåller en eller flera åsidosättningar för att styra SQL-frågegenerering. Den vanligaste användningen av det här fältet är att tillhandahålla logik för att generera en LIMIT/OFFSET-sats för drivrutiner som inte stöder TOP.

Fälten inkluderar Constant och LimitClause.

Mer information: Åsidosätta AstVisitor
CancelQueryExplicitly Ett logiskt värde som instruerar M-motorn att uttryckligen avbryta alla pågående anrop via ODBC-drivrutinen innan anslutningen till ODBC-servern avslutas.

Det här fältet är användbart i situationer där frågekörningen hanteras oberoende av nätverksanslutningarna till servern, till exempel i vissa Spark-distributioner. I de flesta fall behöver det här värdet inte anges eftersom frågan på servern avbryts när nätverksanslutningen till servern avslutas.

Standard: FALSKT
ClientConnectionPooling Ett logiskt värde som möjliggör anslutningspooler på klientsidan för ODBC-drivrutinen. De flesta drivrutiner vill ange det här värdet till sant.

Standard: FALSKT
CredentialConnectionString Ett text- eller postvärde som används för att ange egenskaper för autentiseringsuppgifter som är relaterade till anslutningssträng.
HideNativeQuery Ett logiskt värde som styr om anslutningsappen visar genererade SQL-instruktioner i Power Query-användarupplevelsen. Detta bör endast anges till sant om serverdelsdatakällan har inbyggt stöd för SQL-92.

Standard: FALSKT
ImplicitTypeConversions Ett tabellvärde som innehåller implicita typkonverteringar som stöds av din drivrutin eller serverdelsserver. Värden i den här tabellen är additiva till de konverteringar som rapporterats av själva drivrutinen.

Det här fältet används vanligtvis med fältet SQLGetTypeInfo vid åsidosättande av datatypsinformation som rapporterats av drivrutinen.
OnError En funktion för felhantering som tar emot en errorRecord parameter av typen record.

Vanliga användningsområden för den här funktionen är att hantera SSL-anslutningsfel, tillhandahålla en nedladdningslänk om drivrutinen inte hittas i systemet och rapportera autentiseringsfel.
SoftNumbers Tillåter att M-motorn väljer en kompatibel datatyp när konvertering mellan två specifika numeriska typer inte deklareras som stöds i funktionerna SQL_CONVERT_* .

Standard: FALSKT
SqlCapabilities En post som tillhandahåller olika åsidosättningar av drivrutinsfunktioner och ett sätt att ange funktioner som inte uttrycks via ODBC 3.8.

Mer information: Åsidosätta SqlCapabilities
SQLColumns En funktion som gör att du kan ändra kolumnmetadata som returneras av SQLColumns funktionen.

Mer information: Åsidosätta SQLColumns
SQLGetFunctions En post som gör att du kan åsidosätta värden som returneras av anrop till SQLGetFunctions.

En vanlig användning av det här fältet är att inaktivera användningen av parameterbindning eller att ange att genererade frågor ska använda CAST i stället för KONVERTERA.

Mer information: Åsidosätta SQLGetFunctions
SQLGetInfo En post som gör att du kan åsidosätta värden som returneras av anrop till SQLGetInfo.

Mer information: Åsidosätta SQLGetInfo
SQLGetTypeInfo En tabell eller funktion som returnerar en tabell som åsidosätter den typinformation som returneras av SQLGetTypeInfo.

När värdet är inställt på en tabell ersätter värdet helt den typinformation som rapporterats av drivrutinen. SQLGetTypeInfo kommer inte att anropas.

När värdet är inställt på en funktion får funktionen resultatet av det ursprungliga anropet till SQLGetTypeInfo, så att du kan ändra tabellen.

Det här fältet används vanligtvis när det finns ett matchningsfel mellan datatyper som rapporteras av SQLGetTypeInfo och SQLColumns.

Mer information: Åsidosätta SQLGetTypeInfo
SQLTables En funktion som gör att du kan ändra tabellmetadata som returneras av ett anrop till SQLTables.
TolerateConcatOverflow Tillåter sammanfogning av textvärden även om resultatet kan trunkeras så att det passar inom intervallet för en tillgänglig typ.

När du till exempel sammanfogar ett VARCHAR-fält (4000) med ett VARCHAR-fält (4000) i ett system som stöder en maximerad VARCHAR-storlek på 4 000 och ingen CLOB-typ, viks sammanfogningen även om resultatet kan trunkeras.

Standard: FALSKT
UseEmbeddedDriver (intern användning): Ett logiskt värde som styr om ODBC-drivrutinen ska läsas in från en lokal katalog (med nya funktioner som definierats i ODBC 4.0-specifikationen). Det här värdet anges vanligtvis endast av anslutningsappar som skapats av Microsoft och som levereras med Power Query.

När värdet är falskt används system-ODBC-drivrutinshanteraren för att hitta och läsa in drivrutinen.

De flesta anslutningsappar behöver inte ange det här fältet.

Standard: FALSKT

Åsidosätta AstVisitor

Fältet AstVisitor anges via alternativposten Odbc.DataSource . Den används för att ändra SQL-instruktioner som genererats för specifika frågescenarier.

Anteckning

Drivrutiner som stöder LIMIT- och OFFSET-satser (i stället för TOP) vill ange en LimitClause åsidosättning för AstVisitor.

Konstant

Att ange en åsidosättning för det här värdet har inaktuellt och kan tas bort från framtida implementeringar.

LimitClause

Det här fältet är en funktion som tar emot två Int64.Type argument (skip, take) och returnerar en post med två textfält (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Parametern skip är antalet rader som ska hoppa över (det vill: argumentet till OFFSET). Om ingen förskjutning har angetts blir hoppa över-värdet null. Om drivrutinen stöder LIMIT, men inte stöder OFFSET, LimitClause bör funktionen returnera ett ogenomfört fel (...) när hoppa över är större än 0.

Parametern take är antalet rader som ska tas (d.v.s. argumentet till LIMIT).

Fältet Text i resultatet innehåller DEN SQL-text som ska läggas till i den genererade frågan.

Fältet Location anger var satsen ska infogas. I följande tabell beskrivs värden som stöds.

Värde beskrivning Exempel
AfterQuerySpecification LIMIT-satsen placeras i slutet av den genererade SQL-filen.

Det här är den vanligaste LIMIT-syntaxen.
SELECT a, b, c

FROM-tabell

WHERE a > 10

GRÄNS 5
BeforeQuerySpecification LIMIT-satsen placeras före den genererade SQL-instruktionen. BEGRÄNSA 5 RADER

SELECT a, b, c

FROM-tabell

WHERE a > 10
AfterSelect LIMIT går efter SELECT-instruktionen och efter eventuella modifierare (till exempel DISTINCT). VÄLJ DISTINKT GRÄNS 5 a, b, c

FROM-tabell

WHERE a > 10
AfterSelectBeforeModifiers LIMIT går efter SELECT-instruktionen, men före eventuella modifierare (till exempel DISTINCT). VÄLJ GRÄNS 5 DISTINCT a, b, c

FROM-tabell

WHERE a > 10

Följande kodfragment innehåller en LimitClause-implementering för en drivrutin som förväntar sig en LIMIT-sats, med en valfri OFFSET, i följande format: [OFFSET <offset> ROWS] LIMIT <row_count>

LimitClause = (skip, take) =>
    let
        offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
        limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
    in
        [
            Text = Text.Format("#{0} #{1}", {offset, limit}),
            Location = "AfterQuerySpecification"
        ]

Följande kodfragment innehåller en LimitClause implementering för en drivrutin som stöder LIMIT, men inte OFFSET. Format: LIMIT <row_count>.

LimitClause = (skip, take) =>
    if (skip > 0) then error "Skip/Offset not supported"
    else
    [
        Text = Text.Format("LIMIT #{0}", {take}),
        Location = "AfterQuerySpecification"
    ]

Åsidosätta SqlCapabilities

Fält Details
FractionalSecondsScale Ett talvärde mellan 1 och 7 som anger antalet decimaler som stöds för millisekunders värden. Det här värdet ska anges av anslutningsappar som vill aktivera frågedelegering över datetime-värden.

Standard: null
PrepareStatements Ett logiskt värde som anger att instruktioner ska förberedas med SQLPrepare.

Standard: FALSKT
SupportsTop Ett logiskt värde som anger att drivrutinen stöder TOP-satsen för att begränsa antalet returnerade rader.

Standard: FALSKT
StringLiteralEscapeCharacters En lista med textvärden som anger vilka tecken som ska användas när strängliteraler och LIKE-uttryck ska undvikas.

Exempel: {""}

Standard: null
SupportsDerivedTable Ett logiskt värde som anger att drivrutinen stöder härledda tabeller (underval).

Det här värdet antas vara sant för drivrutiner som anger sin efterlevnadsnivå till SQL_SC_SQL92_FULL (rapporteras av drivrutinen eller åsidosätts med inställningen Sql92Conformance. För alla andra överensstämmelsenivåer är det här värdet som standard falskt.

Om drivrutinen inte rapporterar SQL_SC_SQL92_FULL efterlevnadsnivå, men stöder härledda tabeller, anger du värdet till sant.

Stöd för härledda tabeller krävs för många DirectQuery-scenarier.
SupportsNumericLiterals Ett logiskt värde som anger om den genererade SQL-filen ska innehålla numeriska literalvärden. När värdet är falskt anges alltid numeriska värden med hjälp av parameterbindning.

Standard: FALSKT
SupportsStringLiterals Ett logiskt värde som anger om den genererade SQL-filen ska innehålla strängliteralvärden. När värdet är falskt anges alltid strängvärden med hjälp av parameterbindning.

Standard: FALSKT
SupportsOdbcDateLiterals Ett logiskt värde som anger om den genererade SQL-filen ska innehålla datumliteralvärden. När värdet är falskt anges alltid datumvärden med hjälp av parameterbindning.

Standard: FALSKT
SupportsOdbcTimeLiterals Ett logiskt värde som anger om den genererade SQL-filen ska innehålla tidsliteralvärden. När värdet är falskt anges alltid tidsvärden med hjälp av parameterbindning.

Standard: FALSKT
SupportsOdbcTimestampLiterals Ett logiskt värde som anger om den genererade SQL:en ska innehålla tidsstämpelliteraler. När värdet är falskt anges alltid tidsstämpelvärden med hjälp av parameterbindning.

Standard: FALSKT

Åsidosätta SQLColumns

SQLColumns är en funktionshanterare som tar emot resultatet av ett ODBC-anrop till SQLColumns. Källparametern innehåller en tabell med information om datatypen. Den här åsidosättningen används vanligtvis för att åtgärda matchningar av datatyp mellan anrop till SQLGetTypeInfo och SQLColumns.

Mer information om formatet för källtabellparametern finns i FUNKTIONEN SQLColumns.

Åsidosätta SQLGetFunctions

Det här fältet används för att åsidosätta SQLFunctions värden som returneras av en ODBC-drivrutin. Den innehåller en post vars fältnamn är lika med konstanterna FunctionId som definierats för funktionen ODBC SQLGetFunctions . Numeriska konstanter för vart och ett av dessa fält finns i ODBC-specifikationen.

Fält Details
SQL_CONVERT_FUNCTIONS Anger vilka funktioner som stöds när du gör typkonverteringar. Som standard försöker M-motorn använda funktionen CONVERT. Drivrutiner som föredrar att använda CAST kan åsidosätta det här värdet för att rapportera att endast SQL_FN_CVT_CAST (numeriskt värde för 0x2) stöds.
SQL_API_SQLBINDCOL Ett logiskt värde (sant/falskt) som anger om kombinationsmotorn ska använda SQLBindCol-API:et när data hämtas. När värdet är falskt används SQLGetData i stället.

Standard: FALSKT

Följande kodfragment innehåller ett exempel som uttryckligen talar om för M-motorn att använda CAST i stället för KONVERTERA.

SQLGetFunctions = [
    SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Åsidosätta SQLGetInfo

Det här fältet används för att åsidosätta SQLGetInfo värden som returneras av en ODBC-drivrutin. Den innehåller en post vars fält är namn som är lika med konstanterna InfoType som definierats för funktionen ODBC SQLGetInfo . Numeriska konstanter för vart och ett av dessa fält finns i ODBC-specifikationen. Den fullständiga listan över InfoTypes som är markerad finns i kombinationsmotorns spårningsfiler.

Följande tabell innehåller ofta åsidosatta SQLGetInfo egenskaper:

Fält Details
SQL_SQL_CONFORMANCE Ett heltalsvärde som anger nivån för SQL-92 som stöds av drivrutinen:

(1) SQL_SC_SQL92_ENTRY: SQL-92-kompatibel på startnivå.
(2) SQL_SC_FIPS127_2_TRANSITIONAL: FIPS 127-2 övergångsnivå är kompatibel.
(4) SQL_SC_ SQL92_INTERMEDIATE" SQL-92-kompatibel på mellannivå.
(8) SQL_SC_SQL92_FULL: Sql-92-kompatibel på fullständig nivå.

I Power Query-scenarier används anslutningsappen i skrivskyddat läge. De flesta drivrutiner vill rapportera en SQL_SC_SQL92_FULL efterlevnadsnivå och åsidosätta specifika SQL-generationsbeteenden med hjälp av SQLGetInfo egenskaperna och SQLGetFunctions .
SQL_SQL92_PREDICATES En bitmask som räknar upp predikaten som stöds i en SELECT-instruktion enligt definitionen i SQL-92.

Gå till SQL_SP_* konstanter i ODBC-specifikationen.
SQL_AGGREGATE_FUNCTIONS Ett bitmaskuppräkningsstöd för aggregeringsfunktioner.

SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM

Gå till SQL_AF_* konstanter i ODBC-specifikationen.
SQL_GROUP_BY Ett heltalsvärde som anger relationen mellan kolumnerna i GROUP BY-satsen och de icke-aggregerade kolumnerna i urvalslistan:

SQL_GB_COLLATE: En COLLATE-sats kan anges i slutet av varje grupperingskolumn.

SQL_GB_NOT_SUPPORTED: GROUP BY-satser stöds inte.

SQL_GB_GROUP_BY_EQUALS_SELECT: GROUP BY-satsen måste innehålla alla icke-aggregerade kolumner i urvalslistan. Den får inte innehålla några andra kolumner. Till exempel SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT.

SQL_GB_GROUP_BY_CONTAINS_SELECT: GROUP BY-satsen måste innehålla alla icke-aggregerade kolumner i urvalslistan. Den kan innehålla kolumner som inte finns i urvalslistan. Till exempel SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT, AGE.

SQL_GB_NO_RELATION: Kolumnerna i GROUP BY-satsen och urvalslistan är inte relaterade. Innebörden av icke-grupperade, icke-aggregerade kolumner i urvalslistan är datakällaberoende. Till exempel SELECT DEPT, SALARY FROM EMPLOYEE GROUP BY DEPT, AGE.

Gå till SQL_GB_* konstanter i ODBC-specifikationen.

Följande hjälpfunktion kan användas för att skapa bitmaskvärden från en lista med heltalsvärden:

Flags = (flags as list) =>
    let
        Loop = List.Generate(
                  ()=> [i = 0, Combined = 0],
                  each [i] < List.Count(flags),
                  each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
                  each [Combined]),
        Result = List.Last(Loop, 0)
    in
        Result;

Åsidosätta SQLGetTypeInfo

SQLGetTypeInfo kan anges på två sätt:

  • Ett fast table värde som innehåller samma typinformation som ett ODBC-anrop till SQLGetTypeInfo.
  • En funktion som accepterar ett tabellargument och returnerar en tabell. Argumentet innehåller det ursprungliga resultatet av ODBC-anropet till SQLGetTypeInfo. Funktionsimplementeringen kan ändra eller lägga till i den här tabellen.

Den första metoden används för att helt åsidosätta de värden som returneras av ODBC-drivrutinen. Den andra metoden används om du vill lägga till eller ändra dessa värden.

Mer information om formatet för tabellparametern typer och förväntat returvärde finns i sqlGetTypeInfo-funktionsreferensen.

SQLGetTypeInfo med hjälp av en statisk tabell

Följande kodfragment innehåller en statisk implementering för SQLGetTypeInfo.

SQLGetTypeInfo = #table(
    { "TYPE_NAME",      "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",           "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

    { "char",           1,          65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,            -8,              null,               null,             0,                    0                }, 
    { "int8",           -5,         19,             "'",            "'",              null,                     1,          0,                2,            0,                    10,                 0,                   "int8",            0,               0,               -5,              null,               2,                0,                    0                },
    { "bit",            -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "bool",           -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "date",           9,          10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "numeric",        3,          28,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "numeric",         0,               0,               2,               null,               10,               0,                    0                },
    { "float8",         8,          15,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "float8",         6,          17,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "uuid",           -11,        37,             null,           null,             null,                     1,          0,                2,            null,                 0,                  null,                "uuid",            null,            null,            -11,             null,               null,             0,                    0                },
    { "int4",           4,          10,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "int4",            0,               0,               4,               null,               2,                0,                    0                },
    { "text",           -1,         65535,          "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "text",            null,            null,            -10,             null,               null,             0,                    0                },
    { "lo",             -4,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "lo",              null,            null,            -4,              null,               null,             0,                    0                }, 
    { "numeric",        2,          28,             null,           null,             "precision, scale",       1,          0,                2,            0,                    10,                 0,                   "numeric",         0,               6,               2,               null,               10,               0,                    0                },
    { "float4",         7,          9,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "float4",          null,            null,            7,               null,               2,                0,                    0                }, 
    { "int2",           5,          19,             null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "int2",           -6,         5,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "timestamp",      11,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "date",           91,         10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "timestamp",      93,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "bytea",          -3,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "bytea",           null,            null,            -3,              null,               null,             0,                    0                }, 
    { "varchar",        12,         65535,          "'",            "'",              "max. length",            1,          0,                2,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                }, 
    { "char",           -8,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,           -8,               null,               null,             0,                    0                }, 
    { "text",           -10,        65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "text",            null,            null,           -10,              null,               null,             0,                    0                }, 
    { "varchar",        -9,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                },
    { "bpchar",         -8,         65535,           "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "bpchar",          null,            null,            -9,               null,               null,            0,                    0                } }
);

SQLGetTypeInfo med hjälp av en funktion

Följande kodfragment lägger till bpchar typen i de befintliga typer som returneras av drivrutinen.

SQLGetTypeInfo = (types as table) as table =>
   let
       newTypes = #table(
           {
               "TYPE_NAME",
               "DATA_TYPE",
               "COLUMN_SIZE",
               "LITERAL_PREF",
               "LITERAL_SUFFIX",
               "CREATE_PARAS",
               "NULLABLE",
               "CASE_SENSITIVE",
               "SEARCHABLE",
               "UNSIGNED_ATTRIBUTE",
               "FIXED_PREC_SCALE",
               "AUTO_UNIQUE_VALUE",
               "LOCAL_TYPE_NAME",
               "MINIMUM_SCALE",
               "MAXIMUM_SCALE",
               "SQL_DATA_TYPE",
               "SQL_DATETIME_SUB",
               "NUM_PREC_RADIX",
               "INTERNAL_PRECISION",
               "USER_DATA_TYPE"
            },
            // we add a new entry for each type we want to add
            {
                {
                    "bpchar",
                    -8,
                    65535,
                    "'",
                    "'",
                    "max. length",
                    1,
                    1,
                    3,
                    null,
                    0,
                    null,
                    "bpchar",
                    null,
                    null,
                    -9,
                    null,
                    null,
                    0,
                    0
                }
            }),
        append = Table.Combine({types, newTypes})
    in
        append;

Ange anslutningssträng

Anslutningssträng för ODBC-drivrutinen anges med hjälp av det första argumentet till funktionerna Odbc.DataSource och Odbc.Query. Värdet kan vara text eller en M-post. När du använder posten blir varje fält i posten en egenskap i anslutningssträng. Alla anslutningssträng kräver ett Driver fält (eller DSN fält om du kräver att användarna förkonfigurerar ett DSN på systemnivå). Autentiseringsrelaterade egenskaper anges separat. Andra egenskaper är drivrutinsspecifika.

Kodfragmentet nedan visar definitionen av en ny datakällfunktion, skapande av ConnectionString posten och anrop av funktionen Odbc.DataSource .

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
    let
        ConnectionString = [
            Driver = "SQL Server Native Client 11.0",
            Server = server,
            MultiSubnetFailover = "Yes",
            ApplicationIntent = "ReadOnly",
            APP = "PowerBICustomConnector"
        ],
        OdbcDatasource = Odbc.DataSource(ConnectionString)
    in
        OdbcDatasource;

Nästa steg