Číst v angličtině

Sdílet prostřednictvím


Parametry pro Odbc.DataSource

Funkce Odbc.DataSource má dva parametry – connectionString ovladač a options záznam, který umožňuje přepsat různá chování ovladače. Prostřednictvím záznamu možností můžete přepsat schopnosti a další informace hlášené ovladačem, řídit chování navigátoru a ovlivnit dotazy SQL generované modulem M.

Podporované možnosti zaznamenávají pole do dvou kategorií – těch, které jsou veřejné a vždy dostupné, a ty, které jsou k dispozici pouze v kontextu rozšiřitelnosti.

Následující tabulka popisuje veřejná pole v záznamu možností.

Pole Popis
CommandTimeout Hodnota doby trvání, která určuje, jak dlouho může dotaz na straně serveru běžet před zrušením.

Výchozí hodnota: 10 minut
ConnectionTimeout Hodnota doby trvání, která určuje dobu čekání před opuštěním pokusu o připojení k serveru.

Výchozí hodnota: 15 sekund
CreateNavigationProperties Logická hodnota, která nastaví, zda se mají generovat navigační vlastnosti ve vrácených tabulkách. Vlastnosti navigace jsou založeny na relacích cizích klíčů hlášených ovladačem. Tyto vlastnosti se zobrazují jako "virtuální" sloupce, které je možné rozbalit v editoru dotazů a vytvořit odpovídající spojení.

Pokud je výpočet závislostí cizího klíče nákladnou operací pro ovladač, můžete tuto hodnotu nastavit na false.

Výchozí: true
HierarchicalNavigation Logická hodnota, která nastaví, jestli se mají zobrazit tabulky seskupené podle názvů schémat. Pokud je nastavená hodnota false, tabulky se zobrazí v plochém seznamu v každé databázi.

Výchozí hodnota: false
SqlCompatibleWindowsAuth Logická hodnota, která určuje, zda se má při použití ověřováníTrusted_Connection=Yes systému Windows vytvořit kompatibilní připojovací řetězec SQL Serveru.

Pokud ovladač podporuje ověřování systému Windows, ale vyžaduje další nebo alternativní nastavení ve vašem připojovací řetězec, měli byste tuto hodnotu nastavit na false a použít pole záznamu CredentialConnectionString možností popsané v další tabulce.

Výchozí: true

Následující tabulka popisuje pole záznamů možností, která jsou k dispozici pouze prostřednictvím rozšiřitelnosti. Pole, která nejsou jednoduchými hodnotami literálů, jsou popsána v dalších částech.

Pole Popis
AstVisitor Záznam obsahující jeden nebo více přepsání pro řízení generování dotazů SQL. Nejběžnějším využitím tohoto pole je poskytnutí logiky pro generování klauzule LIMIT/OFFSET pro ovladače, které nepodporují TOP.

Pole zahrnují Constant a LimitClause.

Další informace: Přepsání astVisitoru
CancelQueryExplicitly Logická hodnota, která dává modulu M pokyn, aby explicitně zrušila všechna spuštěná volání prostřednictvím ovladače ODBC před ukončením připojení k serveru ODBC.

Toto pole je užitečné v situacích, kdy se spouštění dotazů spravuje nezávisle na síťových připojeních k serveru, například v některých nasazeních Sparku. Ve většině případů není potřeba tuto hodnotu nastavit, protože dotaz na serveru se zruší při ukončení síťového připojení k serveru.

Výchozí hodnota: false
ClientConnectionPooling Logická hodnota, která umožňuje sdružování připojení na straně klienta pro ovladač ODBC. Většinaovladačůch

Výchozí hodnota: false
CredentialConnectionString Text nebo hodnota záznamu použitá k určení vlastností souvisejících s přihlašovacími údaji připojovací řetězec.
HideNativeQuery Logická hodnota, která určuje, jestli konektor zobrazuje vygenerované příkazy SQL v uživatelském prostředí Power Query. Tato hodnota by měla být nastavena na true pouze v případě, že back-endový zdroj dat nativně podporuje SQL-92.

Výchozí hodnota: false
ImplicitTypeConversions Hodnota tabulky obsahující implicitní převody typů podporované ovladačem nebo back-endovým serverem. Hodnoty v této tabulce se přidají do převodů hlášených samotným ovladačem.

Toto pole se obvykle používá s polem SQLGetTypeInfo při přepsání informací o datovém typu hlášených ovladačem.
OnError Funkce zpracování chyb, která přijímá errorRecord parametr typu record.

Mezi běžné použití této funkce patří zpracování selhání připojení SSL, poskytnutí odkazu ke stažení, pokud se váš ovladač v systému nenajde, a hlášení chyb ověřování.
SoftNumbers Umožňuje modulu M vybrat kompatibilní datový typ, pokud převod mezi dvěma konkrétními číselnými typy není deklarován jako podporovaný v možnostech SQL_CONVERT_*.

Výchozí hodnota: false
SqlCapabilities Záznam, který poskytuje různá přepsání schopností ovladačů a způsob, jak určit možnosti, které nejsou vyjádřeny prostřednictvím rozhraní ODBC 3.8.

Další informace: Přepsání sqlCapabilities
SQLColumns Funkce, která umožňuje upravit metadata sloupců vrácená SQLColumns funkcí.

Další informace: Přepsání sqlColumns
SQLGetFunctions Záznam, který umožňuje přepsat hodnoty vrácené voláním SQLGetFunctions.

Běžným použitím tohoto pole je zakázat použití vazby parametrů nebo určit, že vygenerované dotazy by měly místo funkce CONVERT používat přetypování.

Další informace: Přepsání sqlGetFunctions
SQLGetInfo Záznam, který umožňuje přepsat hodnoty vrácené voláním SQLGetInfo.

Další informace: Přepsání SQLGetInfo
SQLGetTypeInfo Tabulka nebo funkce, která vrací tabulku, která přepisuje informace o typu vrácené SQLGetTypeInfofunkcí .

Pokud je hodnota nastavena na tabulku, hodnota zcela nahradí informace o typu hlášené ovladačem. SQLGetTypeInfo nebude volána.

Když je hodnota nastavena na funkci, vaše funkce obdrží výsledek původního volání SQLGetTypeInfo, což vám umožní upravit tabulku.

Toto pole se obvykle používá v případě neshody mezi datovými typy hlášenými SQLGetTypeInfo a SQLColumns.

Další informace: Přepsání sqlGetTypeInfo
SQLTables Funkce, která umožňuje upravit metadata tabulky vrácená voláním SQLTables.
TolerateConcatOverflow Umožňuje zřetězení textových hodnot i v případě, že výsledek může být zkrácen tak, aby odpovídal rozsahu dostupného typu.

Například při zřetězení pole VARCHAR(4000) s polem VARCHAR(4000) v systému, které podporuje maximální velikost VARCHAR 4000 a žádný typ CLOB, zřetězení se přeloží, i když se výsledek může zkrátit.

Výchozí hodnota: false
UseEmbeddedDriver (interní použití): Logická hodnota, která určuje, zda má být ovladač ODBC načten z místního adresáře (pomocí nových funkcí definovaných ve specifikaci ODBC 4.0). Tato hodnota je obecně nastavená pouze konektory vytvořenými Microsoftem, které jsou dodávány pomocí Power Query.

Při nastavení na hodnotu false se správce ovladačů ODBC systému používá k vyhledání a načtení ovladače.

Většina konektorů by toto pole neměla nastavovat.

Výchozí hodnota: false

Přepsání astVisitoru

Pole AstVisitor je nastaveno prostřednictvím záznamu možností Odbc.DataSource . Slouží k úpravě příkazů SQL generovaných pro konkrétní scénáře dotazů.

Poznámka

Ovladače, které podporují klauzule LIMIT a OFFSET (místo TOP), budou chtít poskytnout přepsání LimitClause .AstVisitor

Konstanta

Poskytnutí přepsání této hodnoty je zastaralé a může být odebráno z budoucích implementací.

LimitClause

Toto pole je funkce, která přijímá dva Int64.Type argumenty (skip, take) a vrací záznam se dvěma textovými poli (Text, Location).

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

Parametr skip je počet řádků, které se mají přeskočit (to znamená argument POSUN). Pokud není zadán posun, hodnota přeskočení bude null. Pokud ovladač podporuje limit, ale nepodporuje POSUN, LimitClause měla by funkce vrátit neplementovanou chybu (...), pokud je přeskočení větší než 0.

Parametr take je počet řádků, které se mají vzít (to znamená argument LIMIT).

Pole Text výsledku obsahuje text SQL, který se má přidat do vygenerovaného dotazu.

Pole Location určuje, kam se má klauzule vložit. Následující tabulka popisuje podporované hodnoty.

Hodnota Popis Příklad
AfterQuerySpecification Klauzule LIMIT se umístí na konec vygenerovaného SQL.

Toto je nejčastěji podporovaná syntaxe LIMIT.
SELECT a, b, c

Tabulka FROM

WHERE A > 10

LIMIT 5
BeforeQuerySpecification Klauzule LIMIT je vložena před vygenerovaný příkaz SQL. LIMIT 5 ŘÁDKŮ

SELECT a, b, c

Tabulka FROM

WHERE A > 10
AfterSelect LIMIT přejde za příkaz SELECT a za libovolnými modifikátory (například DISTINCT). SELECT DISTINCT LIMIT 5 a, b, c

Tabulka FROM

WHERE A > 10
AfterSelectBeforeModifiers LIMIT přejde za příkaz SELECT, ale před všemi modifikátory (například DISTINCT). SELECT LIMIT 5 DISTINCT a, b, c

Tabulka FROM

WHERE A > 10

Následující fragment kódu poskytuje implementaci LimitClause pro ovladač, který očekává klauzuli LIMIT s volitelným posunem v následujícím formátu: [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"
        ]

Následující fragment kódu poskytuje LimitClause implementaci pro ovladač, který podporuje limit, ale nikoli POSUN. Formát: LIMIT <row_count>.

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

Přepsání sqlCapabilities

Pole Detaily
FractionalSecondsScale Číselná hodnota v rozsahu od 1 do 7 označující počet desetinných míst podporovaných pro hodnoty milisekund. Tuto hodnotu by měly nastavit konektory, které chtějí povolit posouvání dotazů přes hodnoty data a času.

Výchozí hodnota: null
PrepareStatements Logická hodnota, která označuje, že příkazy by měly být připraveny pomocí sqlPrepare.

Výchozí hodnota: false
SupportsTop Logická hodnota, která označuje, že ovladač podporuje klauzuli TOP k omezení počtu vrácených řádků.

Výchozí hodnota: false
StringLiteralEscapeCharacters Seznam textových hodnot, které určují znaky, které se mají použít při escaping řetězcových literálech a výrazech LIKE.

Příklad: {""}

Výchozí hodnota: null
SupportsDerivedTable Logická hodnota, která označuje, že ovladač podporuje odvozené tabulky (dílčí výběry).

U ovladačů, které nastavují úroveň shody na SQL_SC_SQL92_FULL (hlášené ovladačem nebo přepsáním pomocí nastavení Sql92Conformance, se předpokládá, že tato hodnota je pravdivá. U všech ostatních úrovní shody se tato hodnota ve výchozím nastavení nastaví na false.

Pokud ovladač nehlásí úroveň dodržování předpisů SQL_SC_SQL92_FULL, ale podporuje odvozené tabulky, nastavte tuto hodnotu na true.

Podpora odvozených tabulek se vyžaduje pro mnoho scénářů DirectQuery.
SupportsNumericLiterals Logická hodnota, která označuje, jestli má vygenerovaný SQL obsahovat číselné hodnoty literálů. Pokud je nastavená hodnota false, číselné hodnoty se vždy zadají pomocí vazby parametrů.

Výchozí hodnota: false
SupportsStringLiterals Logická hodnota, která označuje, jestli má vygenerovaný SQL obsahovat hodnoty řetězcových literálů. Pokud je nastavená hodnota false, řetězcové hodnoty se vždy zadají pomocí vazby parametrů.

Výchozí hodnota: false
SupportsOdbcDateLiterals Logická hodnota, která označuje, jestli má vygenerovaný SQL obsahovat hodnoty literálů kalendářních dat. Pokud je nastavená hodnota false, hodnoty kalendářních dat se vždy zadají pomocí vazby parametrů.

Výchozí hodnota: false
SupportsOdbcTimeLiterals Logická hodnota, která označuje, jestli má vygenerovaný SQL obsahovat hodnoty časových literálů. Pokud je nastavená hodnota false, časové hodnoty se vždy zadají pomocí vazby parametrů.

Výchozí hodnota: false
SupportsOdbcTimestampLiterals Logická hodnota, která označuje, jestli má vygenerovaný SQL obsahovat hodnoty literálů časového razítka. Při nastavení na hodnotu false se hodnoty časového razítka vždy zadají pomocí vazby parametru.

Výchozí hodnota: false

Přepsání sloupce SQLColumns

SQLColumnsje obslužná rutina funkce, která přijímá výsledky volání ODBC sqlColumns. Zdrojový parametr obsahuje tabulku s informacemi o datovém typu. Toto přepsání se obvykle používá k opravě neshod datových typů mezi voláními a SQLGetTypeInfo SQLColumns.

Podrobnosti o formátu parametru zdrojové tabulky najdete ve funkci SQLColumns.

Přepsání funkcí SQLGetFunctions

Toto pole slouží k přepsání SQLFunctions hodnot vrácených ovladačem ODBC. Obsahuje záznam, jehož názvy polí jsou rovny FunctionId konstantám definovaným pro funkci ODBC SQLGetFunctions . Číselné konstanty pro každé z těchto polí najdete ve specifikaci ODBC.

Pole Detaily
SQL_CONVERT_FUNCTIONS Určuje, které funkce jsou podporovány při převodech typů. Ve výchozím nastavení se modul M pokusí použít funkci CONVERT. Ovladače, které dávají přednost použití funkce CAST, mohou tuto hodnotu přepsat tak, aby hlásily, že se podporuje pouze SQL_FN_CVT_CAST (číselná hodnota 0x2).
SQL_API_SQLBINDCOL Logická hodnota (true/false), která označuje, jestli modul mashupu má při načítání dat použít rozhraní SQLBindCol API . Pokud je nastavená hodnota false, použije se místo toho SQLGetData .

Výchozí hodnota: false

Následující fragment kódu poskytuje příklad explicitně sděluje modulu M, aby místo funkce CONVERT používal cast.

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

Přepsání SQLGetInfo

Toto pole slouží k přepsání SQLGetInfo hodnot vrácených ovladačem ODBC. Obsahuje záznam, jehož pole jsou názvy rovny InfoType konstantám definovaným pro funkci ODBC SQLGetInfo . Číselné konstanty pro každé z těchto polí najdete ve specifikaci ODBC. Úplný seznam InfoTypes kontrolovaných souborů najdete v trasovacích souborech mashupového stroje.

Následující tabulka obsahuje běžně přepisované SQLGetInfo vlastnosti:

Pole Detaily
SQL_SQL_CONFORMANCE Celočíselná hodnota označující úroveň SQL-92 podporovanou ovladačem:

(1) SQL_SC_SQL92_ENTRY: Úroveň vstupu SQL-92 vyhovující předpisům.
(2) SQL_SC_FIPS127_2_TRANSITIONAL: přechodná úroveň FIPS 127–2.
(4) SQL_SC_ SQL92_INTERMEDIATE" vyhovující standardu SQL-92 střední úrovně.
(8) SQL_SC_SQL92_FULL: Úplná úroveň SQL-92 kompatibilní.

Ve scénářích Power Query se konektor používá v režimu jen pro čtení. Většina ovladačů bude chtít nahlásit úroveň dodržování předpisů SQL_SC_SQL92_FULL a přepsat konkrétní chování generování SQL pomocí vlastností SQLGetInfo a SQLGetFunctions vlastností.
SQL_SQL92_PREDICATES Bitová maska výčet predikátů podporovaných v příkazu SELECT, jak je definováno v SQL-92.

Ve specifikaci ODBC přejděte na konstanty SQL_SP_*.
SQL_AGGREGATE_FUNCTIONS Výčet bitových masků pro agregační funkce

SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM

Ve specifikaci ODBC přejděte na konstanty SQL_AF_*.
SQL_GROUP_BY Celočíselná hodnota, která určuje vztah mezi sloupci v klauzuli GROUP BY a neagregovanými sloupci v seznamu select:

SQL_GB_COLLATE: Na konci každého sloupce seskupení lze zadat klauzuli COLLATE.

SQL_GB_NOT_SUPPORTED: Klauzule GROUP BY se nepodporují.

SQL_GB_GROUP_BY_EQUALS_SELECT: Klauzule GROUP BY musí obsahovat všechny neagregované sloupce v seznamu select. Nemůže obsahovat žádné další sloupce. Například SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT.

SQL_GB_GROUP_BY_CONTAINS_SELECT: Klauzule GROUP BY musí obsahovat všechny neagregované sloupce v seznamu select. Může obsahovat sloupce, které nejsou v seznamu výběru. Například SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT, AGE.

SQL_GB_NO_RELATION: Sloupce v klauzuli GROUP BY a seznam select nesouvisí. Význam neseskupených, neagregovaných sloupců v seznamu výběrů je závislý na zdroji dat. Například SELECT DEPT, SALARY FROM EMPLOYEE GROUP BY DEPT, AGE.

Ve specifikaci ODBC přejděte na konstanty SQL_GB_*.

Následující pomocná funkce se dá použít k vytvoření hodnot bitových mask z seznamu celočíselné hodnoty:

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;

Přepsání SQLGetTypeInfo

SQLGetTypeInfo lze zadat dvěma způsoby:

  • Pevná table hodnota, která obsahuje stejné informace o typu jako volání SQLGetTypeInfoODBC .
  • Funkce, která přijímá argument tabulky a vrací tabulku. Argument obsahuje původní výsledky volání SQLGetTypeInfoODBC . Implementace funkce může upravit nebo přidat do této tabulky.

První přístup slouží k úplnému přepsání hodnot vrácených ovladačem ODBC. Druhý přístup se používá, pokud chcete tyto hodnoty přidat nebo upravit.

Podrobnosti o formátu parametru tabulky typů a očekávané návratové hodnotě najdete v referenčních informacích k funkci SQLGetTypeInfo.

SQLGetTypeInfo pomocí statické tabulky

Následující fragment kódu poskytuje statickou implementaci pro 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 s využitím funkce

Následující fragmenty kódu připojují bpchar typ k existujícím typům vráceným ovladačem.

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;

Nastavení připojovací řetězec

Připojovací řetězec pro ovladač ODBC je nastaven pomocí prvního argumentu pro funkce Odbc.DataSource a Odbc.Query. Hodnota může být text nebo záznam M. Při použití záznamu se každé pole v záznamu stane vlastností v připojovací řetězec. Všechny připojovací řetězec vyžadují Driver pole (nebo DSN pole, pokud požadujete, aby uživatelé předem nakonfigurovali dsN na úrovni systému). Vlastnosti související s přihlašovacími údaji jsou nastaveny samostatně. Jiné vlastnosti jsou specifické pro ovladač.

Následující fragment kódu ukazuje definici nové funkce zdroje dat, vytvoření záznamu ConnectionString a vyvolání funkce 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;

Další kroky