Læs på engelsk

Del via


Parametre for Odbc.DataSource

Funktionen Odbc.DataSource tager to parametre – a connectionString for din driver og en options post, der giver dig mulighed for at tilsidesætte forskellige driverfunktioner. Via indstillingsposten kan du tilsidesætte funktioner og andre oplysninger, der rapporteres af driveren, styre navigatorens funktionsmåde og påvirke de SQL-forespørgsler, der genereres af M-programmet.

De understøttede indstillinger registrerer felter i to kategorier – dem, der er offentlige og altid tilgængelige, og dem, der kun er tilgængelige i en udvidelseskontekst.

I følgende tabel beskrives de offentlige felter i indstillingsposten.

Felt Beskrivelse
CommandTimeout En varighedsværdi, der styrer, hvor længe serverforespørgslen må køre, før den annulleres.

Standard: 10 minutter
ConnectionTimeout En varighedsværdi, der styrer, hvor længe der skal ventes, før et forsøg på at oprette forbindelse til serveren afbrydes.

Standard: 15 sekunder
CreateNavigationProperties En logisk værdi, der angiver, om der skal genereres navigationsegenskaber for de returnerede tabeller. Navigationsegenskaber er baseret på relationer for fremmede nøgler, der er rapporteret af driveren. Disse egenskaber vises som "virtuelle" kolonner, der kan udvides i forespørgselseditoren og dermed oprette den relevante joinforbindelse.

Hvis beregning af afhængigheder for fremmede nøgler er en dyr handling for din driver, kan du angive denne værdi til falsk.

Standard: true
HierarchicalNavigation En logisk værdi, der angiver, om tabellerne skal vises grupperet efter skemanavne. Når den er angivet til falsk, vises tabeller på en flad liste under hver database.

Standard: false
SqlCompatibleWindowsAuth En logisk værdi, der bestemmer, om der skal oprettes en SQL Server-kompatibel forbindelsesstreng, når du bruger Windows-godkendelse –Trusted_Connection=Yes

Hvis din driver understøtter Windows-godkendelse, men kræver ekstra eller alternative indstillinger i din forbindelsesstreng, skal du angive denne værdi til falsk og bruge feltet med postindstillingerCredentialConnectionString, der er beskrevet i den næste tabel.

Standard: true

I følgende tabel beskrives de postfelter med indstillinger, der kun er tilgængelige via udvidelse. Felter, der ikke er simple konstantværdier, beskrives i senere afsnit.

Felt Beskrivelse
AstVisitor En post, der indeholder en eller flere tilsidesættelser for at styre oprettelsen af SQL-forespørgsler. Den mest almindelige brug af dette felt er at levere logik til at generere en LIMIT/OFFSET-delsætning for drivere, der ikke understøtter TOP.

Felterne omfatter Constant og LimitClause.

Flere oplysninger: Tilsidesættelse af AstVisitor
CancelQueryExplicitly En logisk værdi, der giver M-programmet besked om eksplicit at annullere alle kørende kald via ODBC-driveren, før forbindelsen til ODBC-serveren afsluttes.

Dette felt er nyttigt i situationer, hvor udførelse af forespørgsler administreres uafhængigt af netværksforbindelserne til serveren, f.eks. i nogle Spark-installationer. I de fleste tilfælde behøver denne værdi ikke at blive angivet, fordi forespørgslen på serveren annulleres, når netværksforbindelsen til serveren afbrydes.

Standard: false
ClientConnectionPooling En logisk værdi, der muliggør gruppering af forbindelser på klientsiden for ODBC-driveren. De fleste drivere vil angive denne værdi til sand.

Standard: false
CredentialConnectionString En tekst- eller postværdi, der bruges til at angive egenskaber for legitimationsoplysninger forbindelsesstreng.
HideNativeQuery En logisk værdi, der styrer, om connectoren viser genererede SQL-sætninger i brugeroplevelsen i Power Query. Dette bør kun angives til sand, hvis back end-datakilden oprindeligt understøtter SQL-92.

Standard: false
ImplicitTypeConversions En tabelværdi, der indeholder implicitte typekonverteringer, som understøttes af driveren eller backendserveren. Værdier i denne tabel er additive til de konverteringer, der rapporteres af selve driveren.

Dette felt bruges typisk sammen med feltet SQLGetTypeInfo , når datatypeoplysninger, der er rapporteret af driveren, tilsidesættes.
OnError En fejlhåndteringsfunktion, der modtager en errorRecord parameter af typen record.

Almindelig brug af denne funktion omfatter håndtering af SSL-forbindelsesfejl, angivelse af et downloadlink, hvis din driver ikke findes på systemet, og rapportering af godkendelsesfejl.
SoftNumbers Gør det muligt for M-programmet at vælge en kompatibel datatype, når konvertering mellem to specifikke numeriske typer ikke erklæres som understøttet i SQL_CONVERT_* funktioner.

Standard: false
SqlCapabilities En post, der giver forskellige tilsidesættelser af driveregenskaber, og en måde at angive egenskaber, der ikke udtrykkes via ODBC 3.8.

Flere oplysninger: Tilsidesættelse af SQL-funktioner
SQLColumns En funktion, der giver dig mulighed for at ændre kolonnemetadata, der returneres af funktionen SQLColumns .

Flere oplysninger: Tilsidesættelse af SQLColumns
SQLGetFunctions En post, der giver dig mulighed for at tilsidesætte værdier, der returneres af kald til SQLGetFunctions.

En almindelig brug af dette felt er at deaktivere brugen af parameterbinding eller at angive, at genererede forespørgsler skal bruge CAST i stedet for CONVERT.

Flere oplysninger: Tilsidesættelse af SQLGetFunctions
SQLGetInfo En post, der giver dig mulighed for at tilsidesætte værdier, der returneres af kald til SQLGetInfo.

Flere oplysninger: Tilsidesættelse af SQLGetInfo
SQLGetTypeInfo En tabel eller funktion, der returnerer en tabel, der tilsidesætter de typeoplysninger, der returneres af SQLGetTypeInfo.

Når værdien er angivet til en tabel, erstatter værdien fuldstændigt de typeoplysninger, der rapporteres af driveren. SQLGetTypeInfo ikke bliver kaldt.

Når værdien er angivet til en funktion, modtager funktionen resultatet af det oprindelige kald til SQLGetTypeInfo, så du kan ændre tabellen.

Dette felt bruges typisk, når der er uoverensstemmelse mellem datatyper, der rapporteres af SQLGetTypeInfo og SQLColumns.

Flere oplysninger: Tilsidesættelse af SQLGetTypeInfo
SQLTables En funktion, der giver dig mulighed for at ændre de tabelmetadata, der returneres af et kald til SQLTables.
TolerateConcatOverflow Gør det muligt at sammenkæde tekstværdier, selvom resultatet kan afkortes, så det passer inden for intervallet for en tilgængelig type.

Når du f.eks. sammenkæder et VARCHAR(4000)-felt med et VARCHAR(4000)-felt på et system, der understøtter en maksimer VARCHAR-størrelse på 4000 og ingen CLOB-type, foldes sammenkædningen, selvom resultatet kan blive afkortet.

Standard: false
UseEmbeddedDriver (intern brug): En logisk værdi, der styrer, om ODBC-driveren skal indlæses fra en lokal mappe (ved hjælp af ny funktionalitet, der er defineret i ODBC 4.0-specifikationen). Denne værdi angives generelt kun af forbindelser, der er oprettet af Microsoft, og som leveres med Power Query.

Når den er angivet til falsk, bruges system ODBC-driverstyringen til at finde og indlæse driveren.

De fleste connectors behøver ikke at angive dette felt.

Standard: false

Tilsidesættelse af AstVisitor

Feltet AstVisitor angives via indstillingsposten Odbc.DataSource . Den bruges til at redigere SQL-sætninger, der er genereret for bestemte forespørgselsscenarier.

Bemærk

Drivere, der understøtter LIMIT- og OFFSET-delsætninger (i stedet for TOP), vil angive en LimitClause tilsidesættelse for AstVisitor.

Konstant

Angivelse af en tilsidesættelse af denne værdi frarådes og kan fjernes fra fremtidige implementeringer.

LimitClause

Dette felt er en funktion, der modtager to Int64.Type argumenter (skip, take), og returnerer en post med to tekstfelter (Text, Location).

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

Parameteren skip er det antal rækker, der skal springes over (dvs. argumentet til FORSKYDNING). Hvis der ikke er angivet en forskydning, er spring-værdien null. Hvis driveren understøtter LIMIT, men ikke understøtter OFFSET, skal funktionen LimitClause returnere en ikke-implementeret fejl (...) når spring over er større end 0.

Parameteren take er det antal rækker, der skal tages (dvs. argumentet til LIMIT).

Feltet Text i resultatet indeholder den SQL-tekst, der skal føjes til den genererede forespørgsel.

Feltet Location angiver, hvor delsætningen skal indsættes. I følgende tabel beskrives understøttede værdier.

Værdi Beskrivelse Eksempel
AfterQuerySpecification LIMIT-delsætningen placeres i slutningen af den genererede SQL.

Dette er den mest understøttede LIMIT-syntaks.
VÆLG a, b, c

FRA-tabel

WHERE a > 10

GRÆNSE 5
BeforeQuerySpecification LIMIT-delsætningen placeres før den genererede SQL-sætning. BEGRÆNS 5 RÆKKER

VÆLG a, b, c

FRA-tabel

WHERE a > 10
AfterSelect LIMIT går efter SELECT-sætningen og efter eventuelle modifikatorer (f.eks. DISTINCT). SELECT DISTINCT LIMIT 5 a, b, c

FRA-tabel

WHERE a > 10
AfterSelectBeforeModifiers LIMIT går efter SELECT-sætningen, men før eventuelle modifikatorer (f.eks. DISTINCT). SELECT LIMIT 5 DISTINCT a, b, c

FRA-tabel

WHERE a > 10

Følgende kodestykke indeholder en LimitClause-implementering for en driver, der forventer en LIMIT-delsætning med en valgfri OFFSET i følgende 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ølgende kodestykke leverer en LimitClause implementering for en driver, der understøtter LIMIT, men ikke 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"
    ]

Tilsidesættelse af SQL-funktioner

Felt Oplysninger
FractionalSecondsScale En talværdi fra 1 til 7, der angiver det antal decimaler, der understøttes for millisekundersværdier. Denne værdi skal angives af forbindelser, der vil aktivere forespørgselsdelegering over datetime-værdier.

Standard: null
PrepareStatements En logisk værdi, der angiver, at sætninger skal forberedes ved hjælp af SQLPrepare.

Standard: false
SupportsTop En logisk værdi, der angiver, at driveren understøtter TOP-delsætningen for at begrænse antallet af returnerede rækker.

Standard: false
StringLiteralEscapeCharacters En liste over tekstværdier, der angiver de tegn, der skal bruges, når strengkonstanter og LIKE-udtryk undslippes.

Eksempel: {""}

Standard: null
SupportsDerivedTable En logisk værdi, der angiver, at driveren understøtter afledte tabeller (undervalg).

Denne værdi antages at være sand for drivere, der angiver deres overensstemmelsesniveau til SQL_SC_SQL92_FULL (rapporteret af driveren eller tilsidesat med indstillingen Sql92Conformance. For alle andre overensstemmelsesniveauer er denne værdi som standard false.

Hvis din driver ikke rapporterer SQL_SC_SQL92_FULL overholdelsesniveau, men understøtter tabeller, der understøttes, skal du angive denne værdi til sand.

Der kræves understøttende afledte tabeller til mange DirectQuery-scenarier.
SupportsNumericLiterals En logisk værdi, der angiver, om den genererede SQL skal indeholde numeriske konstantværdier. Når den er angivet til falsk, angives numeriske værdier altid ved hjælp af parameterbinding.

Standard: false
SupportsStringLiterals En logisk værdi, der angiver, om den genererede SQL skal indeholde værdier for strengkonstantværdier. Når den er angivet til falsk, angives strengværdier altid ved hjælp af parameterbinding.

Standard: false
SupportsOdbcDateLiterals En logisk værdi, der angiver, om den genererede SQL skal indeholde værdier for datokonstanter. Når den er angivet til falsk, angives datoværdier altid ved hjælp af parameterbinding.

Standard: false
SupportsOdbcTimeLiterals En logisk værdi, der angiver, om den genererede SQL skal indeholde værdier for tidskonstanter. Når den er angivet til falsk, angives klokkeslætsværdier altid ved hjælp af parameterbinding.

Standard: false
SupportsOdbcTimestampLiterals En logisk værdi, der angiver, om den genererede SQL skal indeholde værdier for tidsstempelkonstanter. Når den er angivet til falsk, angives tidsstempelværdier altid ved hjælp af parameterbinding.

Standard: false

Tilsidesættelse af SQLColumns

SQLColumns er en funktionshandler, der modtager resultaterne af et ODBC-kald til SQLColumns. Kildeparameteren indeholder en tabel med oplysninger om datatypen. Denne tilsidesættelse bruges typisk til at løse uoverensstemmelser mellem datatyper mellem kald til SQLGetTypeInfo og SQLColumns.

Du kan finde flere oplysninger om formatet af kildetabelparameteren ved at gå til FUNKTIONEN SQLColumns.

Tilsidesættelse af SQLGetFunctions

Dette felt bruges til at tilsidesætte SQLFunctions værdier, der returneres af en ODBC-driver. Den indeholder en post, hvis feltnavne er lig med de FunctionId konstanter, der er defineret for funktionen ODBC SQLGetFunctions . Numeriske konstanter for hvert af disse felter findes i ODBC-specifikationen.

Felt Oplysninger
SQL_CONVERT_FUNCTIONS Angiver, hvilke funktioner der understøttes, når der udføres typekonverteringer. M-programmet forsøger som standard at bruge funktionen CONVERT. Drivere, der foretrækker brugen af CAST, kan tilsidesætte denne værdi for at rapportere, at kun SQL_FN_CVT_CAST (numerisk værdi af 0x2) understøttes.
SQL_API_SQLBINDCOL En logisk værdi (true/false), der angiver, om miksprogrammet skal bruge SQLBindCol-API'en, når der hentes data. Når den er angivet til falsk, bruges SQLGetData i stedet.

Standard: false

Følgende kodestykke indeholder et eksempel, der eksplicit fortæller M-programmet om at bruge CAST i stedet for CONVERT.

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

Tilsidesætter SQLGetInfo

Dette felt bruges til at tilsidesætte SQLGetInfo værdier, der returneres af en ODBC-driver. Den indeholder en post, hvis felter er navne, der svarer til de InfoType konstanter, der er defineret for funktionen ODBC SQLGetInfo . Numeriske konstanter for hvert af disse felter findes i ODBC-specifikationen. Den komplette liste over InfoTypes , der er kontrolleret, kan findes i miksprogrammets sporingsfiler.

Følgende tabel indeholder ofte tilsidesatde SQLGetInfo egenskaber:

Felt Oplysninger
SQL_SQL_CONFORMANCE En heltalsværdi, der angiver niveauet af SQL-92, som understøttes af driveren:

(1) SQL_SC_SQL92_ENTRY: SQL-92-kompatibelt indgangsniveau.
(2) SQL_SC_FIPS127_2_TRANSITIONAL: FIPS 127-2 over gangsniveau, der er i overensstemmelse.
(4) SQL_SC_ SQL92_INTERMEDIATE" SQL-92-kompatibelt mellemniveau.
(8) SQL_SC_SQL92_FULL: SQL-92-kompatibelt på fuldt niveau.

I Power Query-scenarier bruges connectoren i skrivebeskyttet tilstand. De fleste drivere vil rapportere et SQL_SC_SQL92_FULL overholdelsesniveau og tilsidesætte en bestemt FUNKTIONSMÅDE for SQL-generering ved hjælp af SQLGetInfo egenskaberne og SQLGetFunctions .
SQL_SQL92_PREDICATES En bitmaske, der optæller de prædikater, der understøttes i en SELECT-sætning, som defineret i SQL-92.

Gå til SQL_SP_* konstanter i ODBC-specifikationen.
SQL_AGGREGATE_FUNCTIONS En bitmaske, der optæller understøttelse af sammenlægningsfunktioner.

SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM

Gå til SQL_AF_* konstanter i ODBC-specifikationen.
SQL_GROUP_BY En heltalsværdi, der angiver relationen mellem kolonnerne i GROUP BY-delsætningen og de ikke-aggregerede kolonner på listen vælg:

SQL_GB_COLLATE: Der kan angives en COLLATE-delsætning i slutningen af hver grupperingskolonne.

SQL_GB_NOT_SUPPORTED: GROUP BY-delsætninger understøttes ikke.

SQL_GB_GROUP_BY_EQUALS_SELECT: GROUP BY-delsætningen skal indeholde alle ikke-aggregerede kolonner på listen vælg. Den kan ikke indeholde andre kolonner. VÆLG F.EKS. DEPT, MAX(SALARY) FRA EMPLOYEE GROUP BY DEPT.

SQL_GB_GROUP_BY_CONTAINS_SELECT: GROUP BY-delsætningen skal indeholde alle ikke-aggregerede kolonner på listen vælg. Den kan indeholde kolonner, der ikke findes på listen vælg. VÆLG F.EKS. DEPT, MAX(SALARY) FRA EMPLOYEE GROUP BY DEPT, AGE.

SQL_GB_NO_RELATION: Kolonnerne i GROUP BY-delsætningen og listen vælg er ikke relateret til hinanden. Betydningen af ikke-grupperede, ikke-aggregerede kolonner på listen vælg er datakildeafhængig. VÆLG F.EKS. DEPT, LØN FRA MEDARBEJDERGRUPPE EFTER DEPT, ALDER.

Gå til SQL_GB_* konstanter i ODBC-specifikationen.

Følgende hjælpefunktion kan bruges til at oprette bitmaskeværdier ud fra en liste over heltalsværdier:

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;

Tilsidesætter SQLGetTypeInfo

SQLGetTypeInfo kan angives på to måder:

  • En fast table værdi, der indeholder de samme typeoplysninger som et ODBC-kald til SQLGetTypeInfo.
  • En funktion, der accepterer et tabelargument og returnerer en tabel. Argumentet indeholder de oprindelige resultater af ODBC-kaldet til SQLGetTypeInfo. Din funktionsimplementering kan ændre eller føje til denne tabel.

Den første metode bruges til fuldstændigt at tilsidesætte de værdier, der returneres af ODBC-driveren. Den anden fremgangsmåde bruges, hvis du vil føje til eller ændre disse værdier.

Du kan finde flere oplysninger om formatet af tabelparameteren typer og den forventede returværdi ved at gå til referencen til funktionen SQLGetTypeInfo.

SQLGetTypeInfo ved hjælp af en statisk tabel

Følgende kodestykke leverer en statisk implementering for 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 ved hjælp af en funktion

Følgende kodestykker føjer bpchar typen til de eksisterende typer, der returneres af driveren.

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;

Indstilling af forbindelsesstreng

Den forbindelsesstreng til ODBC-driveren angives ved hjælp af det første argument til funktionerne Odbc.DataSource og Odbc.Query. Værdien kan være tekst eller en M-post. Når du bruger posten, bliver hvert felt i posten en egenskab i forbindelsesstreng. Alle forbindelsesstreng kræver et Driver felt (eller DSN felt, hvis du kræver, at brugerne forudkonfigurer et DSN på systemniveau). Egenskaber, der er relateret til legitimationsoplysninger, angives separat. Andre egenskaber er driverspecifikke.

Kodestykket nedenfor viser definitionen af en ny datakildefunktion, oprettelse af ConnectionString posten og aktivering af 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æste trin