Parameters voor Odbc.DataSource
De functie Odbc.DataSource heeft twee parameters: een connectionString
voor uw stuurprogramma en een options
record waarmee u verschillende gedrag van stuurprogramma's kunt overschrijven. Via de optiesrecord kunt u mogelijkheden en andere informatie overschrijven die door het stuurprogramma worden gerapporteerd, het navigatorgedrag beheren en invloed hebben op de SQL-query's die door de M-engine worden gegenereerd.
De ondersteunde opties records worden onderverdeeld in twee categorieën: velden die openbaar en altijd beschikbaar zijn, en velden die alleen beschikbaar zijn in een uitbreidbaarheidscontext.
In de volgende tabel worden de openbare velden in de optiesrecord beschreven.
Veld | Beschrijving |
---|---|
CommandTimeout |
Een duurwaarde waarmee wordt bepaald hoe lang de query aan de serverzijde mag worden uitgevoerd voordat deze wordt geannuleerd. Standaard: 10 minuten |
ConnectionTimeout |
Een duurwaarde waarmee wordt bepaald hoe lang moet worden gewacht voordat een poging tot het maken van een verbinding met de server wordt afgelaten. Standaard: 15 seconden |
CreateNavigationProperties |
Een logische waarde waarmee wordt ingesteld of navigatie-eigenschappen voor de geretourneerde tabellen moeten worden gegenereerd. Navigatie-eigenschappen zijn gebaseerd op relaties met refererende sleutels die door het stuurprogramma zijn gerapporteerd. Deze eigenschappen worden weergegeven als 'virtuele' kolommen die kunnen worden uitgevouwen in de query-editor, waardoor de juiste join wordt gemaakt. Als het berekenen van afhankelijkheden van refererende sleutels een dure bewerking voor uw stuurprogramma is, kunt u deze waarde instellen op onwaar. Standaardwaarde: waar |
HierarchicalNavigation |
Een logische waarde waarmee wordt ingesteld of de tabellen moeten worden weergegeven die zijn gegroepeerd op basis van de schemanamen. Wanneer deze is ingesteld op onwaar, worden tabellen weergegeven in een platte lijst onder elke database. Standaardwaarde: onwaar |
SqlCompatibleWindowsAuth |
Een logische waarde waarmee wordt bepaald of een met SQL Server compatibele verbindingsreeks moet worden geproduceerd bij het gebruik van Windows-verificatieTrusted_Connection=Yes .Als uw stuurprogramma Ondersteuning biedt voor Windows-verificatie, maar extra of alternatieve instellingen in uw verbindingsreeks vereist, moet u deze waarde instellen op onwaar en het CredentialConnectionString veld opties opnemen dat wordt beschreven in de volgende tabel.Standaardwaarde: waar |
In de volgende tabel worden de recordvelden beschreven die alleen beschikbaar zijn via uitbreidbaarheid. Velden die geen eenvoudige letterlijke waarden zijn, worden beschreven in latere secties.
Veld | Beschrijving |
---|---|
AstVisitor |
Een record met een of meer onderdrukkingen om het genereren van SQL-query's te beheren. Het meest voorkomende gebruik van dit veld is om logica te bieden voor het genereren van een LIMIT/OFFSET-component voor stuurprogramma's die geen ondersteuning bieden voor TOP. Velden bevatten Constant en LimitClause .Meer informatie: AstVisitor overschrijven |
CancelQueryExplicitly |
Een logische waarde die de M-engine opdracht geeft om actieve aanroepen expliciet te annuleren via het ODBC-stuurprogramma voordat de verbinding met de ODBC-server wordt beëindigd. Dit veld is handig in situaties waarin de uitvoering van query's onafhankelijk van de netwerkverbindingen met de server wordt beheerd, bijvoorbeeld in sommige Spark-implementaties. In de meeste gevallen hoeft deze waarde niet te worden ingesteld omdat de query op de server wordt geannuleerd wanneer de netwerkverbinding met de server wordt beëindigd. Standaardwaarde: onwaar |
ClientConnectionPooling |
Een logische waarde waarmee groepsgewijze verbindingen aan de clientzijde voor het ODBC-stuurprogramma mogelijk zijn. De meeste stuurprogramma's willen deze waarde instellen op waar. Standaardwaarde: onwaar |
CredentialConnectionString |
Een tekst- of recordwaarde die wordt gebruikt voor het opgeven van referenties verbindingsreeks eigenschappen. |
HideNativeQuery |
Een logische waarde waarmee wordt bepaald of de connector gegenereerde SQL-instructies weergeeft in de Gebruikerservaring van Power Query. Dit moet alleen worden ingesteld op waar als de back-endgegevensbron systeemeigen ONDERSTEUNING biedt voor SQL-92. Standaardwaarde: onwaar |
ImplicitTypeConversions |
Een tabelwaarde met impliciete typeconversies die worden ondersteund door uw stuurprogramma of back-endserver. Waarden in deze tabel zijn additief aan de conversies die door het stuurprogramma zelf zijn gerapporteerd. Dit veld wordt meestal gebruikt met het SQLGetTypeInfo veld bij het overschrijven van gegevenstypegegevens die door het stuurprogramma worden gerapporteerd. |
OnError |
Een foutafhandelingsfunctie die een errorRecord parameter van het type record ontvangt.Veelvoorkomende toepassingen van deze functie zijn het afhandelen van SSL-verbindingsfouten, het leveren van een downloadkoppeling als uw stuurprogramma niet op het systeem wordt gevonden en verificatiefouten rapporteert. |
SoftNumbers |
Hiermee kan de M-engine een compatibel gegevenstype selecteren wanneer de conversie tussen twee specifieke numerieke typen niet wordt gedeclareerd als ondersteund in de SQL_CONVERT_*-mogelijkheden. Standaardwaarde: onwaar |
SqlCapabilities |
Een record die verschillende onderdrukkingen van stuurprogrammamogelijkheden biedt en een manier om mogelijkheden op te geven die niet worden uitgedrukt via ODBC 3.8. Meer informatie: SqlCapabilities overschrijven |
SQLColumns |
Een functie waarmee u kolommetagegevens kunt wijzigen die door de SQLColumns functie worden geretourneerd.Meer informatie: SQLColumns overschrijven |
SQLGetFunctions |
Een record waarmee u waarden kunt overschrijven die worden geretourneerd door aanroepen naar SQLGetFunctions .Dit veld wordt vaak gebruikt om het gebruik van parameterbinding uit te schakelen of om op te geven dat gegenereerde query's CAST moeten gebruiken in plaats van CONVERTEREN. Meer informatie: SQLGetFunctions overschrijven |
SQLGetInfo |
Een record waarmee u waarden kunt overschrijven die worden geretourneerd door aanroepen naar SQLGetInfo .Meer informatie: SQLGetInfo overschrijven |
SQLGetTypeInfo |
Een tabel of functie die een tabel retourneert die de typegegevens overschrijft die worden geretourneerd door SQLGetTypeInfo .Wanneer de waarde is ingesteld op een tabel, vervangt de waarde de typegegevens die door het stuurprogramma worden gerapporteerd, volledig. SQLGetTypeInfo wordt niet gebeld.Wanneer de waarde is ingesteld op een functie, ontvangt uw functie het resultaat van de oorspronkelijke aanroep, SQLGetTypeInfo zodat u de tabel kunt wijzigen.Dit veld wordt meestal gebruikt wanneer er sprake is van een niet-overeenkomende gegevenstypen die door SQLGetTypeInfo en SQLColumns .Meer informatie: SQLGetTypeInfo overschrijven |
SQLTables |
Een functie waarmee u de metagegevens van de tabel kunt wijzigen die worden geretourneerd door een aanroep naar SQLTables . |
TolerateConcatOverflow |
Hiermee kunt u tekstwaarden samenvoegen, zelfs als het resultaat mogelijk wordt afgekapt om binnen het bereik van een beschikbaar type te passen. Wanneer u bijvoorbeeld een VARCHAR-veld(4000) samenvoegt met een VARCHAR(4000)-veld op een systeem dat ondersteuning biedt voor een maximale VARCHAR-grootte van 4000 en geen CLOB-type, wordt de samenvoeging gevouwen, zelfs als het resultaat mogelijk wordt afgekapt. Standaardwaarde: onwaar |
UseEmbeddedDriver |
(intern gebruik): Een logische waarde waarmee wordt bepaald of het ODBC-stuurprogramma moet worden geladen vanuit een lokale map (met behulp van nieuwe functionaliteit die is gedefinieerd in de ODBC 4.0-specificatie). Deze waarde wordt over het algemeen alleen ingesteld door connectors die door Microsoft worden gemaakt die worden verzonden met Power Query. Als deze is ingesteld op false, wordt het systeem ODBC-stuurprogrammabeheer gebruikt om het stuurprogramma te zoeken en te laden. De meeste connectors hoeven dit veld niet in te stellen. Standaardwaarde: onwaar |
Het AstVisitor
veld wordt ingesteld via de odbc.DataSource-optiesrecord . Deze wordt gebruikt om SQL-instructies te wijzigen die zijn gegenereerd voor specifieke queryscenario's.
Notitie
Stuurprogramma's die ondersteuning bieden voor LIMIT- en OFFSET-componenten (in plaats van TOP) willen een LimitClause
onderdrukking voor AstVisitor
.
Het opgeven van een onderdrukking voor deze waarde is afgeschaft en kan worden verwijderd uit toekomstige implementaties.
Dit veld is een functie die twee Int64.Type
argumenten (skip
, take
) ontvangt en een record retourneert met twee tekstvelden (Text
, Location
).
LimitClause = (skip as nullable number, take as number) as record => ...
De skip
parameter is het aantal rijen dat moet worden overgeslagen (het argument voor VERSCHUIVING). Als er geen offset is opgegeven, is de waarde voor overslaan null. Als uw stuurprogramma LIMIT ondersteunt, maar offset niet ondersteunt, moet de LimitClause
functie een niet-geïmplementeerde fout (...) retourneren wanneer het overslaan groter is dan 0.
De take
parameter is het aantal rijen dat moet worden gebruikt (dat wil gezegd het argument LIMIT).
Het Text
veld van het resultaat bevat de SQL-tekst die moet worden toegevoegd aan de gegenereerde query.
In Location
het veld wordt aangegeven waar de component moet worden ingevoegd. In de volgende tabel worden ondersteunde waarden beschreven.
Weergegeven als | Beschrijving | Voorbeeld |
---|---|---|
AfterQuerySpecification |
DE LIMIT-component wordt aan het einde van de gegenereerde SQL geplaatst. Dit is de meest ondersteunde LIMIT-syntaxis. |
SELECT a, b, c FROM-tabel WHERE a > 10 LIMIET 5 |
BeforeQuerySpecification |
DE LIMIT-component wordt vóór de gegenereerde SQL-instructie geplaatst. | LIMIET VAN 5 RIJEN SELECT a, b, c FROM-tabel WHERE a > 10 |
AfterSelect |
LIMIT gaat na de SELECT-instructie en na eventuele wijzigingsaanpassingen (zoals DISTINCT). | SELECT DISTINCT LIMIT 5 a, b, c FROM-tabel WHERE a > 10 |
AfterSelectBeforeModifiers |
LIMIT gaat na de SELECT-instructie, maar vóór eventuele modifiers (zoals DISTINCT). | SELECT LIMIT 5 DISTINCT a, b, c FROM-tabel WHERE a > 10 |
Het volgende codefragment biedt een LimitClause-implementatie voor een stuurprogramma dat een LIMIT-component verwacht, met een optionele OFFSET, in de volgende indeling: [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"
]
Het volgende codefragment biedt een LimitClause
implementatie voor een stuurprogramma dat LIMIT ondersteunt, maar niet OFFSET. Indeling: LIMIT <row_count>
.
LimitClause = (skip, take) =>
if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]
Veld | DETAILS |
---|---|
FractionalSecondsScale |
Een getalwaarde tussen 1 en 7 dat het aantal decimalen aangeeft dat wordt ondersteund voor milliseconden. Deze waarde moet worden ingesteld door connectors die het vouwen van query's via datum/tijd-waarden willen inschakelen. Standaardwaarde: null |
PrepareStatements |
Een logische waarde die aangeeft dat instructies moeten worden voorbereid met behulp van SQLPrepare. Standaardwaarde: onwaar |
SupportsTop |
Een logische waarde die aangeeft dat het stuurprogramma de TOP-component ondersteunt om het aantal geretourneerde rijen te beperken. Standaardwaarde: onwaar |
StringLiteralEscapeCharacters |
Een lijst met tekstwaarden die de tekens opgeven die moeten worden gebruikt bij het ontsnappen van letterlijke tekenreeksen en LIKE-expressies. Voorbeeld: {""} Standaardwaarde: null |
SupportsDerivedTable |
Een logische waarde die aangeeft dat het stuurprogramma afgeleide tabellen ondersteunt (subselecties). Deze waarde wordt verondersteld waar te zijn voor stuurprogramma's die hun nalevingsniveau instellen op SQL_SC_SQL92_FULL (gerapporteerd door het stuurprogramma of overschreven met de instelling Sql92Conformance. Voor alle andere nalevingsniveaus wordt deze waarde standaard ingesteld op onwaar. Als uw stuurprogramma het SQL_SC_SQL92_FULL nalevingsniveau niet rapporteert, maar wel afgeleide tabellen ondersteunt, stelt u deze waarde in op waar. Het ondersteunen van afgeleide tabellen is vereist voor veel DirectQuery-scenario's. |
SupportsNumericLiterals |
Een logische waarde die aangeeft of de gegenereerde SQL numerieke letterlijke waarden moet bevatten. Als deze optie is ingesteld op onwaar, worden numerieke waarden altijd opgegeven met behulp van parameterbinding. Standaardwaarde: onwaar |
SupportsStringLiterals |
Een logische waarde die aangeeft of de gegenereerde SQL letterlijke waarden voor tekenreeksen moet bevatten. Als deze optie is ingesteld op onwaar, worden tekenreekswaarden altijd opgegeven met behulp van parameterbinding. Standaardwaarde: onwaar |
SupportsOdbcDateLiterals |
Een logische waarde die aangeeft of de gegenereerde SQL letterlijke waarden voor datums moet bevatten. Als deze optie is ingesteld op onwaar, worden datumwaarden altijd opgegeven met behulp van parameterbinding. Standaardwaarde: onwaar |
SupportsOdbcTimeLiterals |
Een logische waarde die aangeeft of de gegenereerde SQL waarden voor letterlijke tijd moet bevatten. Als deze optie is ingesteld op onwaar, worden tijdwaarden altijd opgegeven met behulp van parameterbinding. Standaardwaarde: onwaar |
SupportsOdbcTimestampLiterals |
Een logische waarde die aangeeft of de gegenereerde SQL letterlijke waarden voor tijdstempels moet bevatten. Als deze optie is ingesteld op onwaar, worden tijdstempelwaarden altijd opgegeven met behulp van parameterbinding. Standaardwaarde: onwaar |
SQLColumns
is een functiehandler die de resultaten van een ODBC-aanroep naar SQLColumns ontvangt. De bronparameter bevat een tabel met de gegevenstypegegevens. Deze onderdrukking wordt doorgaans gebruikt om niet-overeenkomende gegevenstypen tussen aanroepen naar SQLGetTypeInfo
en SQLColumns
.
Ga naar de functie SQLColumns voor meer informatie over de indeling van de brontabelparameter.
Dit veld wordt gebruikt om waarden te overschrijven SQLFunctions
die worden geretourneerd door een ODBC-stuurprogramma. Het bevat een record waarvan veldnamen gelijk zijn aan de FunctionId
constanten die zijn gedefinieerd voor de functie ODBC SQLGetFunctions . Numerieke constanten voor elk van deze velden vindt u in de ODBC-specificatie.
Veld | DETAILS |
---|---|
SQL_CONVERT_FUNCTIONS |
Geeft aan welke functie(s) worden ondersteund bij het uitvoeren van typeconversies. De M Engine probeert standaard de functie CONVERT te gebruiken. Stuurprogramma's die de voorkeur geven aan het gebruik van CAST, kunnen deze waarde overschrijven om te rapporteren dat alleen SQL_FN_CVT_CAST (numerieke waarde van 0x2) wordt ondersteund. |
SQL_API_SQLBINDCOL |
Een logische waarde (waar/onwaar) die aangeeft of de mashup-engine de SQLBindCol-API moet gebruiken bij het ophalen van gegevens. Als deze is ingesteld op onwaar, wordt SQLGetData in plaats daarvan gebruikt. Standaardwaarde: onwaar |
Het volgende codefragment bevat een voorbeeld waarin de M-engine expliciet wordt verteld dat cast moet worden gebruikt in plaats van CONVERTEREN.
SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]
Dit veld wordt gebruikt om waarden te overschrijven SQLGetInfo
die worden geretourneerd door een ODBC-stuurprogramma. Het bevat een record waarvan de velden namen zijn die gelijk zijn aan de InfoType
constanten die zijn gedefinieerd voor de functie ODBC SQLGetInfo . Numerieke constanten voor elk van deze velden vindt u in de ODBC-specificatie. De volledige lijst InfoTypes
met gecontroleerd bestanden vindt u in de mashup engine traceringsbestanden.
De volgende tabel bevat veelgebruikte SQLGetInfo
eigenschappen:
Veld | DETAILS |
---|---|
SQL_SQL_CONFORMANCE |
Een geheel getal dat het niveau van SQL-92 aangeeft dat wordt ondersteund door het stuurprogramma: (1) SQL_SC_SQL92_ENTRY: Compatibel met SQL-92 op invoerniveau. (2) SQL_SC_FIPS127_2_TRANSITIONAL: FIPS 127-2-overgangsniveau conform. (4) compatibel met SQL-92 SQL_SC_ SQL92_INTERMEDIATE"- tussenliggend niveau. (8) SQL_SC_SQL92_FULL: compatibel met SQL-92 op volledig niveau. In Power Query-scenario's wordt de connector gebruikt in de modus Alleen-lezen. De meeste stuurprogramma's willen een SQL_SC_SQL92_FULL nalevingsniveau rapporteren en het gedrag van specifieke SQL-generatie overschrijven met behulp van de SQLGetInfo en SQLGetFunctions eigenschappen. |
SQL_SQL92_PREDICATES |
Een bitmasker waarin de predicaten worden opgesomd die worden ondersteund in een SELECT-instructie, zoals gedefinieerd in SQL-92. Ga naar SQL_SP_* constanten in de ODBC-specificatie. |
SQL_AGGREGATE_FUNCTIONS |
Een bitmasker met een opsomming van ondersteuning voor aggregatiefuncties. SQL_AF_ALL SQL_AF_AVG SQL_AF_COUNT SQL_AF_DISTINCT SQL_AF_MAX SQL_AF_MIN SQL_AF_SUM Ga naar SQL_AF_* constanten in de ODBC-specificatie. |
SQL_GROUP_BY |
Een geheel getal dat de relatie aangeeft tussen de kolommen in de GROUP BY-component en de niet-geaggregeerde kolommen in de selectielijst: SQL_GB_COLLATE: aan het einde van elke groeperingskolom kan een COLLATE-component worden opgegeven. SQL_GB_NOT_SUPPORTED: GROUP BY-componenten worden niet ondersteund. SQL_GB_GROUP_BY_EQUALS_SELECT: De GROUP BY-component moet alle niet-geaggregeerde kolommen in de selectielijst bevatten. Het mag geen andere kolommen bevatten. SELECTEER BIJVOORBEELD DEPT, MAX(SALARIS) VAN WERKNEMERSGROEP PER AFDELING. SQL_GB_GROUP_BY_CONTAINS_SELECT: De GROUP BY-component moet alle niet-geaggregeerde kolommen in de selectielijst bevatten. Het kan kolommen bevatten die niet in de selectielijst zitten. SELECTEER BIJVOORBEELD DEPT, MAX(SALARIS) VAN WERKNEMERSGROEP PER AFDELING, LEEFTIJD. SQL_GB_NO_RELATION: De kolommen in de GROUP BY-component en de selectielijst zijn niet gerelateerd. De betekenis van niet-gegroepeerde, niet-geaggregeerde kolommen in de selectielijst is afhankelijk van de gegevensbron. SELECTEER BIJVOORBEELD DEPT, SALARIS VAN WERKNEMERSGROEP OPPT, LEEFTIJD. Ga naar SQL_GB_* constanten in de ODBC-specificatie. |
De volgende helperfunctie kan worden gebruikt om bitmaskerwaarden te maken op basis van een lijst met gehele getallen:
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;
SQLGetTypeInfo
kan op twee manieren worden opgegeven:
- Een vaste
table
waarde die dezelfde typegegevens bevat als een ODBC-aanroep naarSQLGetTypeInfo
. - Een functie die een tabelargument accepteert en een tabel retourneert. Het argument bevat de oorspronkelijke resultaten van de ODBC-aanroep naar
SQLGetTypeInfo
. Uw functie-implementatie kan deze tabel wijzigen of toevoegen.
De eerste methode wordt gebruikt om de waarden die worden geretourneerd door het ODBC-stuurprogramma volledig te overschrijven. De tweede methode wordt gebruikt als u deze waarden wilt toevoegen of wijzigen.
Voor meer informatie over de indeling van de tabelparameter typen en de verwachte retourwaarde gaat u naar de functiereferentie van SQLGetTypeInfo.
Het volgende codefragment biedt een statische implementatie voor 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 } }
);
Met de volgende codefragmenten wordt het bpchar
type toegevoegd aan de bestaande typen die door het stuurprogramma worden geretourneerd.
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;
De verbindingsreeks voor het ODBC-stuurprogramma wordt ingesteld met behulp van het eerste argument voor de functies Odbc.DataSource en Odbc.Query. De waarde kan tekst of een M-record zijn. Wanneer u de record gebruikt, wordt elk veld in de record een eigenschap in de verbindingsreeks. Alle verbindingsreeks vereisen een Driver
veld (of DSN
veld als u wilt dat gebruikers een DSN op systeemniveau vooraf configureren). Eigenschappen met betrekking tot referenties worden afzonderlijk ingesteld. Andere eigenschappen zijn specifiek voor stuurprogramma's.
In het onderstaande codefragment ziet u de definitie van een nieuwe gegevensbronfunctie, het maken van de record en het ConnectionString
aanroepen van de functie 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;