Parameter untuk Odbc.DataSource
Fungsi Odbc.DataSource mengambil dua parameter—untuk connectionString
driver Anda, dan options
catatan yang memungkinkan Anda mengambil alih berbagai perilaku driver. Melalui rekaman opsi, Anda dapat mengambil alih kemampuan dan informasi lain yang dilaporkan oleh driver, mengontrol perilaku navigator, dan memengaruhi kueri SQL yang dihasilkan oleh mesin M.
Bidang rekaman opsi yang didukung termasuk dalam dua kategori—bidang yang bersifat publik dan selalu tersedia, dan yang hanya tersedia dalam konteks ekstensibilitas.
Tabel berikut ini menjelaskan bidang publik dalam rekaman opsi.
Bidang | Deskripsi |
---|---|
CommandTimeout |
Nilai durasi yang mengontrol berapa lama kueri sisi server diizinkan untuk dijalankan sebelum dibatalkan. Default: 10 menit |
ConnectionTimeout |
Nilai durasi yang mengontrol berapa lama menunggu sebelum meninggalkan upaya untuk membuat koneksi ke server. Default: 15 detik |
CreateNavigationProperties |
Nilai logis yang mengatur apakah akan menghasilkan properti navigasi pada tabel yang dikembalikan. Properti navigasi didasarkan pada hubungan kunci asing yang dilaporkan oleh driver. Properti ini muncul sebagai kolom "virtual" yang dapat diperluas di editor kueri, membuat gabungan yang sesuai. Jika menghitung dependensi kunci asing adalah operasi mahal untuk driver Anda, Anda mungkin ingin mengatur nilai ini ke false. Default: true |
HierarchicalNavigation |
Nilai logis yang mengatur apakah akan menampilkan tabel yang dikelompokkan menurut nama skemanya. Saat diatur ke false, tabel ditampilkan dalam daftar datar di bawah setiap database. Default: false |
SqlCompatibleWindowsAuth |
Nilai logis yang menentukan apakah akan menghasilkan string koneksi yang kompatibel dengan SQL Server saat menggunakan Autentikasi Windows—Trusted_Connection=Yes .Jika driver Anda mendukung Autentikasi Windows, tetapi memerlukan pengaturan tambahan atau alternatif di string koneksi Anda, Anda harus mengatur nilai ini ke false dan menggunakan CredentialConnectionString bidang rekaman opsi yang dijelaskan dalam tabel berikutnya.Default: true |
Tabel berikut ini menjelaskan bidang rekaman opsi yang hanya tersedia melalui ekstensibilitas. Bidang yang bukan nilai literal sederhana dijelaskan di bagian selanjutnya.
Bidang | Deskripsi |
---|---|
AstVisitor |
Rekaman yang berisi satu atau beberapa penimpaan untuk mengontrol pembuatan kueri SQL. Penggunaan paling umum dari bidang ini adalah menyediakan logika untuk menghasilkan klausul LIMIT/OFFSET untuk driver yang tidak mendukung TOP. Bidang mencakup Constant dan LimitClause .Informasi selengkapnya: Mengambil alih AstVisitor |
CancelQueryExplicitly |
Nilai logis yang menginstruksikan mesin M untuk secara eksplisit membatalkan panggilan yang sedang berjalan melalui driver ODBC sebelum mengakhiri koneksi ke server ODBC. Bidang ini berguna dalam situasi di mana eksekusi kueri dikelola secara independen dari koneksi jaringan ke server, misalnya dalam beberapa penyebaran Spark. Dalam kebanyakan kasus, nilai ini tidak perlu diatur karena kueri di server dibatalkan ketika koneksi jaringan ke server dihentikan. Default: false |
ClientConnectionPooling |
Nilai logis yang memungkinkan pengumpulan koneksi sisi klien untuk driver ODBC. Sebagian besar driver ingin mengatur nilai ini ke true. Default: false |
CredentialConnectionString |
Nilai teks atau rekaman yang digunakan untuk menentukan properti string koneksi terkait kredensial. |
HideNativeQuery |
Nilai logis yang mengontrol apakah konektor memperlihatkan pernyataan SQL yang dihasilkan dalam pengalaman pengguna Power Query atau tidak. Ini hanya boleh diatur ke true jika sumber data back end secara asli mendukung SQL-92. Default: false |
ImplicitTypeConversions |
Nilai tabel yang berisi konversi jenis implisit yang didukung oleh driver atau server backend Anda. Nilai dalam tabel ini bersifat tambahan untuk konversi yang dilaporkan oleh driver itu sendiri. Bidang ini biasanya digunakan dengan SQLGetTypeInfo bidang saat menimpa informasi jenis data yang dilaporkan oleh driver. |
OnError |
Fungsi penanganan kesalahan yang menerima errorRecord parameter jenis record .Penggunaan umum fungsi ini termasuk menangani kegagalan koneksi SSL, menyediakan tautan unduhan jika driver Anda tidak ditemukan di sistem, dan melaporkan kesalahan autentikasi. |
SoftNumbers |
Memungkinkan mesin M memilih jenis data yang kompatibel saat konversi antara dua jenis numerik tertentu tidak dinyatakan sebagai didukung dalam kemampuan SQL_CONVERT_*. Default: false |
SqlCapabilities |
Catatan yang menyediakan berbagai penimpaan kemampuan driver, dan cara untuk menentukan kemampuan yang tidak diekspresikan melalui ODBC 3.8. Informasi selengkapnya: Mengesampingkan SqlCapabilities |
SQLColumns |
Fungsi yang memungkinkan Anda mengubah metadata kolom yang SQLColumns dikembalikan oleh fungsi .Informasi selengkapnya: Mengambil alih SQLColumns |
SQLGetFunctions |
Rekaman yang memungkinkan Anda mengambil alih nilai yang dikembalikan oleh panggilan ke SQLGetFunctions .Penggunaan umum bidang ini adalah untuk menonaktifkan penggunaan pengikatan parameter, atau untuk menentukan bahwa kueri yang dihasilkan harus menggunakan CAST daripada CONVERT. Informasi selengkapnya: Mengesampingkan SQLGetFunctions |
SQLGetInfo |
Rekaman yang memungkinkan Anda mengambil alih nilai yang dikembalikan oleh panggilan ke SQLGetInfo .Informasi selengkapnya: Mengesampingkan SQLGetInfo |
SQLGetTypeInfo |
Tabel atau fungsi yang mengembalikan tabel yang mengambil alih informasi jenis yang dikembalikan oleh SQLGetTypeInfo .Ketika nilai diatur ke tabel, nilai sepenuhnya menggantikan informasi jenis yang dilaporkan oleh driver. SQLGetTypeInfo tidak akan dipanggil.Ketika nilai diatur ke fungsi, fungsi Anda akan menerima hasil panggilan asli ke SQLGetTypeInfo , yang memungkinkan Anda mengubah tabel.Bidang ini biasanya digunakan ketika ada ketidakcocokan antara jenis data yang dilaporkan oleh SQLGetTypeInfo dan SQLColumns .Informasi selengkapnya: Mengambil alih SQLGetTypeInfo |
SQLTables |
Fungsi yang memungkinkan Anda mengubah metadata tabel yang dikembalikan oleh panggilan ke SQLTables . |
TolerateConcatOverflow |
Memungkinkan perangkaian nilai teks terjadi bahkan jika hasilnya mungkin dipotong agar pas dalam rentang jenis yang tersedia. Misalnya, saat menggabungkan bidang VARCHAR(4000) dengan bidang VARCHAR(4000) pada sistem yang mendukung ukuran VARCHAR maksimal 4000 dan tanpa jenis CLOB, perangkaian dilipat meskipun hasilnya mungkin terpotong. Default: false |
UseEmbeddedDriver |
(penggunaan internal): Nilai logis yang mengontrol apakah driver ODBC harus dimuat dari direktori lokal (menggunakan fungsionalitas baru yang ditentukan dalam spesifikasi ODBC 4.0). Nilai ini umumnya hanya diatur oleh konektor yang dibuat oleh Microsoft yang dikirim dengan Power Query. Ketika diatur ke false, manajer driver ODBC sistem digunakan untuk menemukan dan memuat driver. Sebagian besar konektor tidak perlu mengatur bidang ini. Default: false |
Bidang AstVisitor
diatur melalui catatan opsi Odbc.DataSource . Ini digunakan untuk memodifikasi pernyataan SQL yang dihasilkan untuk skenario kueri tertentu.
Catatan
Driver yang mendukung klausul LIMIT dan OFFSET (bukan TOP) ingin memberikan LimitClause
penimpaan untuk AstVisitor
.
Memberikan penimpaan untuk nilai ini telah ditolak dan dapat dihapus dari implementasi di masa mendatang.
Bidang ini adalah fungsi yang menerima dua Int64.Type
argumen (skip
, take
), dan mengembalikan rekaman dengan dua bidang teks (Text
, Location
).
LimitClause = (skip as nullable number, take as number) as record => ...
Parameter skip
adalah jumlah baris yang akan dilewati (yaitu, argumen ke OFFSET). Jika offset tidak ditentukan, nilai lewati akan null. Jika driver Anda mendukung LIMIT, tetapi tidak mendukung OFFSET, LimitClause
fungsi harus mengembalikan kesalahan yang tidak diimpikan (...) saat melewati lebih besar dari 0.
Parameter take
adalah jumlah baris yang akan diambil (yaitu, argumen ke LIMIT).
Bidang Text
hasil berisi teks SQL untuk ditambahkan ke kueri yang dihasilkan.
Bidang Location
menentukan tempat menyisipkan klausa. Tabel berikut ini menjelaskan nilai yang didukung.
Nilai | Deskripsi | Contoh |
---|---|---|
AfterQuerySpecification |
Klausa LIMIT diletakkan di akhir SQL yang dihasilkan. Ini adalah sintaks LIMIT yang paling umum didukung. |
SELECT a, b, c Tabel FROM > DI MANA 10 BATAS 5 |
BeforeQuerySpecification |
Klausa LIMIT dimasukkan sebelum pernyataan SQL yang dihasilkan. | BATAS 5 BARIS SELECT a, b, c Tabel FROM > DI MANA 10 |
AfterSelect |
LIMIT mengejar pernyataan SELECT, dan setelah pengubah apa pun (seperti DISTINCT). | PILIH BATAS BERBEDA 5 a, b, c Tabel FROM > DI MANA 10 |
AfterSelectBeforeModifiers |
LIMIT mengejar pernyataan SELECT, tetapi sebelum pengubah apa pun (seperti DISTINCT). | PILIH BATAS 5 BERBEDA a, b, c Tabel FROM > DI MANA 10 |
Cuplikan kode berikut menyediakan implementasi LimitClause untuk driver yang mengharapkan klausul LIMIT, dengan OFFSET opsional, dalam format berikut: [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"
]
Cuplikan kode berikut menyediakan LimitClause
implementasi untuk driver yang mendukung LIMIT, tetapi tidak 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"
]
Bidang | Detail |
---|---|
FractionalSecondsScale |
Nilai angka mulai dari 1 hingga 7 yang menunjukkan jumlah tempat desimal yang didukung untuk nilai milidetik. Nilai ini harus diatur oleh konektor yang ingin mengaktifkan pelipatan kueri selama nilai tanggalwaktu. Default: null |
PrepareStatements |
Nilai logis yang menunjukkan bahwa pernyataan harus disiapkan menggunakan SQLPrepare. Default: false |
SupportsTop |
Nilai logis yang menunjukkan driver mendukung klausul TOP untuk membatasi jumlah baris yang dikembalikan. Default: false |
StringLiteralEscapeCharacters |
Daftar nilai teks yang menentukan karakter yang akan digunakan saat melarikan diri dari literal string dan ekspresi LIKE. Contoh: {""} Default: null |
SupportsDerivedTable |
Nilai logis yang menunjukkan driver mendukung tabel turunan (sub-pilih). Nilai ini diasumsikan benar untuk driver yang mengatur tingkat kesamaan mereka ke SQL_SC_SQL92_FULL (dilaporkan oleh driver atau ditimpa dengan pengaturan Sql92Conformance. Untuk semua tingkat kesuaian lainnya, nilai ini default ke false. Jika driver Anda tidak melaporkan tingkat kepatuhan SQL_SC_SQL92_FULL, tetapi melakukan tabel turunan dukungan, atur nilai ini ke true. Mendukung tabel turunan diperlukan untuk banyak skenario DirectQuery. |
SupportsNumericLiterals |
Nilai logis yang menunjukkan apakah SQL yang dihasilkan harus menyertakan nilai literal numerik. Ketika diatur ke false, nilai numerik selalu ditentukan menggunakan pengikatan parameter. Default: false |
SupportsStringLiterals |
Nilai logis yang menunjukkan apakah SQL yang dihasilkan harus menyertakan nilai literal string. Saat diatur ke false, nilai string selalu ditentukan menggunakan pengikatan parameter. Default: false |
SupportsOdbcDateLiterals |
Nilai logis yang menunjukkan apakah SQL yang dihasilkan harus menyertakan nilai literal tanggal. Saat diatur ke false, nilai tanggal selalu ditentukan menggunakan pengikatan parameter. Default: false |
SupportsOdbcTimeLiterals |
Nilai logis yang menunjukkan apakah SQL yang dihasilkan harus menyertakan nilai literal waktu. Saat diatur ke false, nilai waktu selalu ditentukan menggunakan pengikatan parameter. Default: false |
SupportsOdbcTimestampLiterals |
Nilai logis yang menunjukkan apakah SQL yang dihasilkan harus menyertakan nilai literal tanda waktu. Saat diatur ke false, nilai tanda waktu selalu ditentukan menggunakan pengikatan parameter. Default: false |
SQLColumns
adalah handler fungsi yang menerima hasil panggilan ODBC ke SQLColumns. Parameter sumber berisi tabel dengan informasi jenis data. Penimpaan ini biasanya digunakan untuk memperbaiki ketidakcocokan jenis data antara panggilan ke SQLGetTypeInfo
dan SQLColumns
.
Untuk detail format parameter tabel sumber, buka Fungsi SQLColumns.
Bidang ini digunakan untuk mengambil alih SQLFunctions
nilai yang dikembalikan oleh driver ODBC. Ini berisi rekaman yang nama bidangnya sama dengan FunctionId
konstanta yang ditentukan untuk fungsi ODBC SQLGetFunctions . Konstanta numerik untuk masing-masing bidang ini dapat ditemukan dalam spesifikasi ODBC.
Bidang | Detail |
---|---|
SQL_CONVERT_FUNCTIONS |
Menunjukkan fungsi mana yang didukung saat melakukan konversi jenis. Secara default, Mesin M mencoba menggunakan fungsi CONVERT. Driver yang lebih memilih penggunaan CAST dapat mengambil alih nilai ini untuk melaporkan bahwa hanya SQL_FN_CVT_CAST (nilai numerik 0x2) yang didukung. |
SQL_API_SQLBINDCOL |
Nilai logis (true/false) yang menunjukkan apakah mesin mashup harus menggunakan API SQLBindCol saat mengambil data. Ketika diatur ke false, SQLGetData digunakan sebagai gantinya. Default: false |
Cuplikan kode berikut memberikan contoh yang secara eksplisit memberi tahu mesin M untuk menggunakan CAST daripada CONVERT.
SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]
Bidang ini digunakan untuk mengambil alih SQLGetInfo
nilai yang dikembalikan oleh driver ODBC. Ini berisi rekaman yang bidangnya adalah nama yang sama dengan InfoType
konstanta yang ditentukan untuk fungsi ODBC SQLGetInfo . Konstanta numerik untuk masing-masing bidang ini dapat ditemukan dalam spesifikasi ODBC. Daftar InfoTypes
lengkap yang diperiksa dapat ditemukan dalam file pelacakan mesin mashup.
Tabel berikut ini berisi properti yang umumnya SQLGetInfo
ditimpa:
Bidang | Detail |
---|---|
SQL_SQL_CONFORMANCE |
Nilai bilangan bulat yang menunjukkan tingkat SQL-92 yang didukung oleh driver: (1) SQL_SC_SQL92_ENTRY: Tingkat entri yang sesuai dengan SQL-92. (2) SQL_SC_FIPS127_2_TRANSITIONAL: TINGKAT transisi FIPS 127-2 sesuai. (4) SQL_SC_ SQL92_INTERMEDIATE" Tingkat menengah yang sesuai dengan SQL-92. (8) SQL_SC_SQL92_FULL: Mematuhi SQL-92 tingkat penuh. Dalam skenario Power Query, konektor digunakan dalam mode Baca Saja. Sebagian besar driver akan ingin melaporkan tingkat kepatuhan SQL_SC_SQL92_FULL, dan mengambil alih perilaku pembuatan SQL tertentu menggunakan SQLGetInfo properti dan SQLGetFunctions . |
SQL_SQL92_PREDICATES |
Bitmask yang menghitung predikat yang didukung dalam pernyataan SELECT, seperti yang didefinisikan dalam SQL-92. Buka konstanta SQL_SP_* dalam spesifikasi ODBC. |
SQL_AGGREGATE_FUNCTIONS |
Bitmask yang menghitung dukungan untuk fungsi agregasi. SQL_AF_ALL SQL_AF_AVG SQL_AF_COUNT SQL_AF_DISTINCT SQL_AF_MAX SQL_AF_MIN SQL_AF_SUM Buka konstanta SQL_AF_* dalam spesifikasi ODBC. |
SQL_GROUP_BY |
Nilai bilangan bulat yang menentukan hubungan antara kolom dalam klausa GROUP BY dan kolom non-agregat dalam daftar pilih: SQL_GB_COLLATE: Klausa COLLATE dapat ditentukan di akhir setiap kolom pengelompokan. SQL_GB_NOT_SUPPORTED: Klausa GROUP BY tidak didukung. SQL_GB_GROUP_BY_EQUALS_SELECT: Klausa GROUP BY harus berisi semua kolom non-agregat dalam daftar pilih. Ini tidak dapat berisi kolom lain. Misalnya, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT. SQL_GB_GROUP_BY_CONTAINS_SELECT: Klausa GROUP BY harus berisi semua kolom non-agregat dalam daftar pilih. Ini dapat berisi kolom yang tidak ada dalam daftar pilih. Misalnya, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT, AGE. SQL_GB_NO_RELATION: Kolom dalam klausa GROUP BY dan daftar pilih tidak terkait. Arti kolom yang tidak dikelompokkan dan tidak diagregasi dalam daftar pemilihan adalah sumber data-dependen. Misalnya, PILIH DEPT, GAJI DARI GRUP KARYAWAN BERDASARKAN DEPT, USIA. Buka konstanta SQL_GB_* dalam spesifikasi ODBC. |
Fungsi pembantu berikut dapat digunakan untuk membuat nilai bitmask dari daftar nilai bilangan bulat:
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
dapat ditentukan dengan dua cara:
- Nilai tetap
table
yang berisi informasi jenis yang sama dengan panggilan ODBC keSQLGetTypeInfo
. - Fungsi yang menerima argumen tabel, dan mengembalikan tabel. Argumen berisi hasil asli panggilan ODBC ke
SQLGetTypeInfo
. Implementasi fungsi Anda dapat mengubah atau menambahkan ke tabel ini.
Pendekatan pertama digunakan untuk sepenuhnya mengambil alih nilai yang dikembalikan oleh driver ODBC. Pendekatan kedua digunakan jika Anda ingin menambahkan atau memodifikasi nilai-nilai ini.
Untuk detail format parameter tabel jenis dan nilai pengembalian yang diharapkan, buka referensi fungsi SQLGetTypeInfo.
Cuplikan kode berikut menyediakan implementasi statis untuk 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 } }
);
Cuplikan kode berikut menambahkan bpchar
jenis ke jenis yang ada yang dikembalikan oleh driver.
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;
String koneksi untuk driver ODBC Anda diatur menggunakan argumen pertama ke fungsi Odbc.DataSource dan Odbc.Query. Nilainya bisa berupa teks, atau rekaman M. Saat menggunakan rekaman, setiap bidang dalam rekaman akan menjadi properti di string koneksi. Semua string koneksi memerlukan Driver
bidang (atau DSN
bidang jika Anda mengharuskan pengguna untuk melakukan pra-konfigurasi DSN tingkat sistem). Properti terkait kredensial diatur secara terpisah. Properti lain khusus driver.
Cuplikan kode di bawah ini menunjukkan definisi fungsi sumber data baru, pembuatan ConnectionString
rekaman, dan pemanggilan fungsi 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;