หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ฟังก์ชัน Odbc.DataSource ใช้พารามิเตอร์สองตัว ได้แก่ a connectionString สําหรับโปรแกรมควบคุมของคุณ และ options บันทึกที่ช่วยให้คุณสามารถแทนที่ลักษณะการทํางานของโปรแกรมควบคุมต่างๆ ได้ ผ่านเรกคอร์ดตัวเลือก คุณสามารถแทนที่ความสามารถและข้อมูลอื่น ๆ ที่รายงานโดยโปรแกรมควบคุม ควบคุมลักษณะการทํางานของตัวนําทาง และส่งผลต่อแบบสอบถาม SQL ที่สร้างโดยกลไกจัดการ M
ฟิลด์เรกคอร์ดตัวเลือกที่ได้รับการสนับสนุนแบ่งออกเป็นสองประเภท ได้แก่ ประเภทที่เป็นสาธารณะและพร้อมใช้งานตลอดเวลา และฟิลด์ที่พร้อมใช้งานในบริบทของความสามารถในการขยายเท่านั้น
ตารางต่อไปนี้อธิบายเขตข้อมูลสาธารณะในเรกคอร์ดตัวเลือก
| ฟิลด์ | คำอธิบาย |
|---|---|
CommandTimeout |
ค่าระยะเวลาที่ควบคุมระยะเวลาที่คิวรีฝั่งเซิร์ฟเวอร์ได้รับอนุญาตให้เรียกใช้ก่อนที่จะถูกยกเลิก ค่าเริ่มต้น: 10 นาที |
ConnectionTimeout |
ค่าระยะเวลาที่ควบคุมระยะเวลาที่จะรอก่อนที่จะละทิ้งความพยายามในการเชื่อมต่อกับเซิร์ฟเวอร์ ค่าเริ่มต้น: 15 วินาที |
CreateNavigationProperties |
ค่าตรรกะที่ตั้งค่าว่าจะสร้างคุณสมบัติการนําทางบนตารางที่ส่งคืนหรือไม่ คุณสมบัติการนําทางจะขึ้นอยู่กับความสัมพันธ์ของคีย์นอกที่รายงานโดยโปรแกรมควบคุม คุณสมบัติเหล่านี้แสดงเป็นคอลัมน์ "เสมือน" ที่สามารถขยายในตัวแก้ไขคิวรี เพื่อสร้างการรวมที่เหมาะสม ถ้าการคํานวณการขึ้นต่อกันของคีย์ต่างประเทศเป็นการดําเนินการที่มีราคาแพงสําหรับโปรแกรมควบคุมของคุณ คุณอาจต้องการตั้งค่านี้เป็นเท็จ ค่าเริ่มต้น: จริง |
HierarchicalNavigation |
ค่าตรรกะที่ตั้งค่าว่าจะดูตารางที่จัดกลุ่มตามชื่อ Schema หรือไม่ เมื่อตั้งค่าเป็นเท็จตารางจะแสดงในรายการแบบเรียบภายใต้แต่ละฐานข้อมูล ค่าเริ่มต้น: เท็จ |
SqlCompatibleWindowsAuth |
ค่าตรรกะที่กําหนดว่าจะสร้างสตริงการเชื่อมต่อที่เข้ากันได้กับ SQL Server เมื่อใช้การรับรองความถูกต้องของ Windows—Trusted_Connection=Yes.ถ้าโปรแกรมควบคุมของคุณสนับสนุนการรับรองความถูกต้องของ Windows แต่ต้องการการตั้งค่าเพิ่มเติมหรือการตั้งค่าอื่นในสตริงการเชื่อมต่อของคุณ คุณควรตั้งค่านี้เป็นเท็จ และใช้ฟิลด์เรกคอร์ดตัวเลือกที่ CredentialConnectionString อธิบายไว้ในตารางถัดไปค่าเริ่มต้น: จริง |
ตารางต่อไปนี้อธิบายฟิลด์เรกคอร์ดตัวเลือกที่พร้อมใช้งานผ่านความสามารถในการขยายเท่านั้น เขตข้อมูลที่ไม่ใช่ค่าสัญพจน์อย่างง่ายจะอธิบายไว้ในส่วนต่อๆ ไป
| ฟิลด์ | คำอธิบาย |
|---|---|
AstVisitor |
เรกคอร์ดที่มีการแทนที่อย่างน้อยหนึ่งรายการเพื่อควบคุมการสร้างคิวรี SQL การใช้งานที่พบบ่อยที่สุดของฟิลด์นี้คือการจัดเตรียมตรรกะเพื่อสร้างส่วนคําสั่ง LIMIT/OFFSET สําหรับโปรแกรมควบคุมที่ไม่สนับสนุน TOP ฟิลด์รวมถึง Constant และ LimitClause.ข้อมูลเพิ่มเติม: การแทนที่ AstVisitor |
CancelQueryExplicitly |
ค่าตรรกะที่สั่งให้กลไกจัดการ M ยกเลิกการเรียกใดๆ ที่กําลังทํางานอยู่อย่างชัดเจนผ่านโปรแกรมควบคุม ODBC ก่อนที่จะยุติการเชื่อมต่อกับเซิร์ฟเวอร์ ODBC ฟิลด์นี้มีประโยชน์ในสถานการณ์ที่การดําเนินการคิวรีได้รับการจัดการโดยไม่ขึ้นกับการเชื่อมต่อเครือข่ายกับเซิร์ฟเวอร์ เช่น ในการปรับใช้ Spark บางรายการ ในกรณีส่วนใหญ่ ไม่จําเป็นต้องตั้งค่านี้เนื่องจากแบบสอบถามในเซิร์ฟเวอร์ถูกยกเลิกเมื่อการเชื่อมต่อเครือข่ายไปยังเซิร์ฟเวอร์ถูกยกเลิก ค่าเริ่มต้น: เท็จ |
ClientConnectionPooling |
ค่าตรรกะที่เปิดใช้งานการรวมการเชื่อมต่อฝั่งไคลเอ็นต์สําหรับโปรแกรมควบคุม ODBC ไดรเวอร์ส่วนใหญ่จะต้องการตั้งค่านี้เป็นจริง ค่าเริ่มต้น: เท็จ |
CredentialConnectionString |
ค่าข้อความหรือเรกคอร์ดที่ใช้ในการระบุคุณสมบัติสตริงการเชื่อมต่อที่เกี่ยวข้องกับข้อมูลประจําตัว |
HideNativeQuery |
ค่าตรรกะที่ควบคุมว่าตัวเชื่อมต่อจะแสดงคําสั่ง SQL ที่สร้างขึ้นในประสบการณ์ของผู้ใช้ Power Query หรือไม่ ควรตั้งค่าเป็น true ก็ต่อเมื่อแหล่งข้อมูลส่วนหลังรองรับ SQL-92 โดยกําเนิด ค่าเริ่มต้น: เท็จ |
ImplicitTypeConversions |
ค่าตารางที่มีการแปลงประเภทโดยนัยที่โปรแกรมควบคุมหรือเซิร์ฟเวอร์แบ็กเอนด์ของคุณรองรับ ค่าในตารางนี้เป็นการเพิ่มให้กับ Conversion ที่รายงานโดยตัวโปรแกรมควบคุมเอง โดยทั่วไปฟิลด์นี้จะใช้กับฟิลด์เมื่อ SQLGetTypeInfo แทนที่ข้อมูลชนิดข้อมูลที่รายงานโดยไดรเวอร์ |
OnError |
ฟังก์ชันการจัดการข้อผิดพลาดที่ได้รับerrorRecordพารามิเตอร์ของประเภทrecordการใช้งานทั่วไปของฟังก์ชันนี้ ได้แก่ การจัดการความล้มเหลวในการเชื่อมต่อ SSL การให้ลิงก์ดาวน์โหลดหากไม่พบไดรเวอร์ของคุณในระบบ และการรายงานข้อผิดพลาดในการรับรองความถูกต้อง |
SoftNumbers |
อนุญาตให้กลไกจัดการ M เลือกชนิดข้อมูลที่เข้ากันได้เมื่อการแปลงระหว่างสองชนิดตัวเลขที่เฉพาะเจาะจงไม่ได้ประกาศว่าได้รับการสนับสนุนในความสามารถของ SQL_CONVERT_* ค่าเริ่มต้น: เท็จ |
SqlCapabilities |
เรกคอร์ดที่ให้การแทนที่ความสามารถของโปรแกรมควบคุมต่างๆ และวิธีการระบุความสามารถที่ไม่ได้แสดงผ่าน ODBC 3.8 ข้อมูลเพิ่มเติม: การแทนที่ SqlCapabilities |
SQLColumns |
ฟังก์ชันที่ช่วยให้คุณสามารถปรับเปลี่ยนข้อมูลเมตาของคอลัมน์ที่ส่งคืนโดย SQLColumns ฟังก์ชันข้อมูลเพิ่มเติม: การแทนที่ SQLColumns |
SQLGetFunctions |
ระเบียนที่ช่วยให้คุณสามารถแทนที่ค่าที่ส่งคืนโดยการเรียก SQLGetFunctionsไปยังการใช้ฟิลด์นี้ทั่วไปคือการปิดใช้งานการใช้การผูกพารามิเตอร์ หรือเพื่อระบุว่าคิวรีที่สร้างขึ้นควรใช้ CAST แทนที่จะเป็น CONVERT ข้อมูลเพิ่มเติม: การแทนที่ SQLGetFunctions |
SQLGetInfo |
ระเบียนที่ช่วยให้คุณสามารถแทนที่ค่าที่ส่งคืนโดยการเรียก SQLGetInfoไปยังข้อมูลเพิ่มเติม: การแทนที่ SQLGetInfo |
SQLGetTypeInfo |
ตารางหรือฟังก์ชันที่ส่งกลับตารางที่แทนที่ข้อมูลชนิดที่ส่งกลับโดยSQLGetTypeInfoเมื่อตั้งค่าเป็นตาราง ค่าจะแทนที่ข้อมูลชนิดที่รายงานโดยผู้ควบคุมโดยสิ้นเชิง SQLGetTypeInfo จะไม่ถูกเรียกเมื่อตั้งค่าเป็นฟังก์ชันฟังก์ชันของคุณจะได้รับผลลัพธ์ของการเรียกเดิมไปยัง SQLGetTypeInfoช่วยให้คุณสามารถแก้ไขตารางได้โดยทั่วไปฟิลด์นี้จะใช้เมื่อมีชนิดข้อมูลที่ไม่ตรงกันที่รายงานโดย SQLGetTypeInfo และSQLColumnsข้อมูลเพิ่มเติม: การแทนที่ SQLGetTypeInfo |
SQLTables |
ฟังก์ชันที่ช่วยให้คุณสามารถแก้ไขข้อมูลเมตาของตารางที่ส่งคืนโดยการเรียก SQLTablesไปยัง |
TolerateConcatOverflow |
อนุญาตให้การต่อค่าข้อความเกิดขึ้นแม้ว่าผลลัพธ์อาจถูกตัดทอนให้พอดีกับช่วงของชนิดที่พร้อมใช้งาน ตัวอย่างเช่น เมื่อเชื่อมต่อเขตข้อมูล VARCHAR(4000) กับเขตข้อมูล VARCHAR(4000) บนระบบที่สนับสนุนขนาด VARCHAR สูงสุดเป็น 4000 และไม่มีชนิด CLOB การต่อกันจะถูกพับแม้ว่าผลลัพธ์อาจถูกตัดทอน ค่าเริ่มต้น: เท็จ |
UseEmbeddedDriver |
(ใช้ภายใน): ค่าตรรกะที่ควบคุมว่าควรโหลดโปรแกรมควบคุม ODBC จากไดเรกทอรีภายในเครื่องหรือไม่ (โดยใช้ฟังก์ชันใหม่ที่กําหนดไว้ในข้อมูลจําเพาะ ODBC 4.0) โดยทั่วไปค่านี้จะถูกตั้งค่าโดยตัวเชื่อมต่อที่สร้างโดย Microsoft ที่จัดส่งพร้อมกับ Power Query เท่านั้น เมื่อตั้งค่าเป็นเท็จ ตัวจัดการโปรแกรมควบคุม ODBC ของระบบจะใช้เพื่อค้นหาและโหลดโปรแกรมควบคุม ตัวเชื่อมต่อส่วนใหญ่ไม่จําเป็นต้องตั้งค่าฟิลด์นี้ ค่าเริ่มต้น: เท็จ |
การแทนที่ AstVisitor
เขตข้อมูลถูกAstVisitorตั้งค่าผ่านเรกคอร์ดตัวเลือก Odbc.DataSource ใช้เพื่อปรับเปลี่ยนคําสั่ง SQL ที่สร้างขึ้นสําหรับสถานการณ์การสืบค้นที่เฉพาะเจาะจง
Note
โปรแกรมควบคุมที่สนับสนุนส่วนคําสั่ง LIMIT และ OFFSET (แทนที่จะเป็น TOP) จะต้องการแทนที่LimitClauseAstVisitor
คงที่
การให้การแทนที่สําหรับค่านี้เลิกใช้แล้ว และอาจถูกลบออกจากการใช้งานในอนาคต
ลิมิตคลาส
เขตข้อมูลนี้เป็นฟังก์ชันที่ได้รับอาร์กิวเมนต์สอง Int64.Type อาร์กิวเมนต์ (skip, take) และส่งกลับระเบียนที่มีเขตข้อมูลข้อความสองเขต (Text, Location)
LimitClause = (skip as nullable number, take as number) as record => ...
skipพารามิเตอร์คือจํานวนแถวที่จะข้าม (นั่นคืออาร์กิวเมนต์ของ OFFSET) ถ้าไม่ได้ระบุออฟเซ็ต ค่าข้ามจะเป็น null ถ้าโปรแกรมควบคุมของคุณสนับสนุน LIMIT แต่ไม่สนับสนุน OFFSET ฟังก์ชันควร LimitClause ส่งคืนข้อผิดพลาดที่ไม่ได้นําไปใช้ (...) เมื่อข้ามมากกว่า 0
takeพารามิเตอร์คือจํานวนแถวที่จะใช้ (นั่นคืออาร์กิวเมนต์ของ LIMIT)
Textเขตข้อมูลของผลลัพธ์ประกอบด้วยข้อความ SQL ที่จะเพิ่มลงในแบบสอบถามที่สร้างขึ้น
Locationฟิลด์ระบุตําแหน่งที่จะแทรกส่วนคําสั่ง ตารางต่อไปนี้อธิบายค่าที่สนับสนุน
| ค่า | คำอธิบาย | ตัวอย่าง |
|---|---|---|
AfterQuerySpecification |
ส่วนคําสั่ง LIMIT จะถูกวางไว้ที่ส่วนท้ายของ SQL ที่สร้างขึ้น นี่คือไวยากรณ์ LIMIT ที่รองรับบ่อยที่สุด |
เลือก a, b, c จากตาราง โดยที่ 10 > จํากัด 5 |
BeforeQuerySpecification |
ส่วนคําสั่ง LIMIT ถูกวางไว้ก่อนคําสั่ง SQL ที่สร้างขึ้น |
จํากัด 5 แถว เลือก a, b, c จากตาราง โดยที่ 10 > |
AfterSelect |
LIMIT จะอยู่หลังคําสั่ง SELECT และหลังตัวแก้ไขใดๆ (เช่น DISTINCT) | เลือก ขีดจํากัดที่แตกต่างกัน 5 a, b, c จากตาราง โดยที่ 10 > |
AfterSelectBeforeModifiers |
LIMIT จะอยู่หลังคําสั่ง SELECT แต่อยู่ก่อนตัวแก้ไขใดๆ (เช่น DISTINCT) | เลือก จํากัด 5 ดิสทีน a, b, c จากตาราง โดยที่ 10 > |
ส่วนย่อยของโค้ดต่อไปนี้มีการใช้งาน LimitClause สําหรับโปรแกรมควบคุมที่คาดว่าจะมีส่วนคําสั่ง LIMIT ที่มี OFFSET ที่เป็นตัวเลือกในรูปแบบต่อไปนี้: [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"
]
ข้อมูลโค้ดต่อไปนี้มี LimitClause การใช้งานสําหรับโปรแกรมควบคุมที่สนับสนุน LIMIT แต่ไม่สนับสนุน OFFSET รูปแบบ: LIMIT <row_count>.
LimitClause = (skip, take) =>
if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]
การแทนที่ SqlCapabilities
| ฟิลด์ | ราย ละเอียด |
|---|---|
FractionalSecondsScale |
ค่าตัวเลขตั้งแต่ 1 ถึง 7 ที่ระบุจํานวนตําแหน่งทศนิยมที่รองรับสําหรับค่ามิลลิวินาที ค่านี้ควรถูกตั้งค่าโดยตัวเชื่อมต่อที่ต้องการเปิดใช้งานการพับคิวรีมากกว่าค่าวันที่และเวลา ค่าเริ่มต้น: null |
PrepareStatements |
ค่าตรรกะที่บ่งชี้ว่าควรเตรียมคําสั่งโดยใช้ SQLPrepare ค่าเริ่มต้น: เท็จ |
SupportsTop |
ค่าตรรกะที่บ่งชี้ว่าโปรแกรมควบคุมสนับสนุนส่วนคําสั่ง TOP เพื่อจํากัดจํานวนแถวที่ส่งคืน ค่าเริ่มต้น: เท็จ |
StringLiteralEscapeCharacters |
รายการของค่าข้อความที่ระบุอักขระที่จะใช้เมื่อหลีกอักขระสตริงและนิพจน์ LIKE ตัวอย่าง: {""}ค่าเริ่มต้น: null |
SupportsDerivedTable |
ค่าตรรกะที่บ่งชี้ว่าไดรเวอร์สนับสนุนตารางที่ได้รับ (การเลือกย่อย) ค่านี้ถือว่าเป็นจริงสําหรับโปรแกรมควบคุมที่ตั้งค่าระดับความสอดคล้องเป็น SQL_SC_SQL92_FULL (รายงานโดยโปรแกรมควบคุมหรือแทนที่ด้วยการตั้งค่าความสอดคล้องของ Sql92 สําหรับระดับความสอดคล้องอื่นๆ ทั้งหมด ค่านี้จะมีค่าเริ่มต้นเป็นเท็จ ถ้าโปรแกรมควบคุมของคุณไม่ได้รายงานระดับการปฏิบัติตามข้อกําหนดของ SQL_SC_SQL92_FULL แต่รายงานตารางที่ได้รับการสนับสนุน ให้ตั้งค่านี้เป็น จริง จําเป็นต้องมีการสนับสนุนตารางที่ได้รับสําหรับสถานการณ์ DirectQuery จํานวนมาก |
SupportsNumericLiterals |
ค่าตรรกะที่บ่งชี้ว่า SQL ที่สร้างขึ้นควรมีค่าสัญพจน์ตัวเลขหรือไม่ เมื่อตั้งค่าเป็นเท็จ ค่าตัวเลขจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์ ค่าเริ่มต้น: เท็จ |
SupportsStringLiterals |
ค่าตรรกะที่บ่งชี้ว่า SQL ที่สร้างขึ้นควรมีค่าสัญพจน์สตริงหรือไม่ เมื่อตั้งค่าเป็นเท็จ ค่าสตริงจะถูกระบุโดยใช้การผูกพารามิเตอร์เสมอ ค่าเริ่มต้น: เท็จ |
SupportsOdbcDateLiterals |
ค่าตรรกะที่บ่งชี้ว่า SQL ที่สร้างขึ้นควรมีค่าสัญพจน์วันที่หรือไม่ เมื่อตั้งค่าเป็นเท็จ ค่าวันที่จะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์ ค่าเริ่มต้น: เท็จ |
SupportsOdbcTimeLiterals |
ค่าตรรกะที่บ่งชี้ว่า SQL ที่สร้างขึ้นควรมีค่าสัญพจน์เวลาหรือไม่ เมื่อตั้งค่าเป็นเท็จ ค่าเวลาจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์ ค่าเริ่มต้น: เท็จ |
SupportsOdbcTimestampLiterals |
ค่าตรรกะที่บ่งชี้ว่า SQL ที่สร้างขึ้นควรมีค่าสัญพจน์การประทับเวลาหรือไม่ เมื่อตั้งค่าเป็นเท็จ ค่าการประทับเวลาจะถูกระบุเสมอโดยใช้การผูกพารามิเตอร์ ค่าเริ่มต้น: เท็จ |
การแทนที่ SQLColumns
SQLColumnsเป็นตัวจัดการฟังก์ชันที่รับผลลัพธ์ของการเรียก ODBC ไปยัง SQLColumns พารามิเตอร์ต้นทางประกอบด้วยตารางที่มีข้อมูลชนิดข้อมูล โดยทั่วไปแล้วการแทนที่นี้จะใช้เพื่อแก้ไขชนิดข้อมูลที่ไม่ตรงกันระหว่างการเรียกไปยังSQLGetTypeInfoSQLColumnsและ
สําหรับรายละเอียดของรูปแบบของพารามิเตอร์ตารางต้นทาง ไปที่ ฟังก์ชัน SQLColumns
การแทนที่ SQLGetFunctions
เขตข้อมูลนี้ใช้เพื่อแทนที่ SQLFunctions ค่าที่ส่งกลับโดยโปรแกรมควบคุม ODBC ประกอบด้วยระเบียนที่มีชื่อเขตข้อมูลเท่ากับค่าFunctionIdคงที่ที่กําหนดไว้สําหรับฟังก์ชัน ODBC SQLGetFunctions ค่าคงที่ตัวเลขสําหรับแต่ละฟิลด์เหล่านี้สามารถพบได้ในข้อกําหนด ODBC
| ฟิลด์ | ราย ละเอียด |
|---|---|
SQL_CONVERT_FUNCTIONS |
ระบุว่าฟังก์ชันใดที่รองรับเมื่อทําการแปลงประเภท โดยค่าเริ่มต้น M Engine จะพยายามใช้ฟังก์ชัน CONVERT โปรแกรมควบคุมที่ต้องการใช้ CAST สามารถแทนที่ค่านี้เพื่อรายงานว่ารองรับเฉพาะ SQL_FN_CVT_CAST (ค่าตัวเลข 0x2) เท่านั้น |
SQL_API_SQLBINDCOL |
ค่าตรรกะ (จริง/เท็จ) ที่บ่งชี้ว่ากลไกจัดการ Mashup ควรใช้ SQLBindCol API เมื่อดึงข้อมูลหรือไม่ เมื่อตั้งค่าเป็นเท็จ ระบบจะใช้ SQLGetData แทน ค่าเริ่มต้น: เท็จ |
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างที่บอกกลไกจัดการ M ให้ใช้ CAST แทน CONVERT อย่างชัดเจน
SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]
การแทนที่ SQLGetInfo
เขตข้อมูลนี้ใช้เพื่อแทนที่ SQLGetInfo ค่าที่ส่งกลับโดยโปรแกรมควบคุม ODBC ประกอบด้วยระเบียนที่มีเขตข้อมูลเป็นชื่อเท่ากับInfoTypeค่าคงที่ที่กําหนดไว้สําหรับฟังก์ชัน ODBC SQLGetInfo ค่าคงที่ตัวเลขสําหรับแต่ละฟิลด์เหล่านี้สามารถพบได้ในข้อกําหนด ODBC รายการ InfoTypes ทั้งหมดที่ตรวจสอบสามารถพบได้ในไฟล์การติดตามกลไกจัดการ mashup
ตารางต่อไปนี้ประกอบด้วยคุณสมบัติที่ถูก SQLGetInfo แทนที่โดยทั่วไป:
| ฟิลด์ | ราย ละเอียด |
|---|---|
SQL_SQL_CONFORMANCE |
ค่าจํานวนเต็มที่ระบุระดับของ SQL-92 ที่โปรแกรมควบคุมสนับสนุน: (1) SQL_SC_SQL92_ENTRY: สอดคล้องกับ SQL-92 ระดับเริ่มต้น (2) SQL_SC_FIPS127_2_TRANSITIONAL: สอดคล้องกับระดับเปลี่ยนผ่าน FIPS 127-2 (4) SQL_SC_ SQL92_INTERMEDIATE" ระดับกลาง สอดคล้องกับ SQL-92 (8) SQL_SC_SQL92_FULL: สอดคล้องกับ SQL-92 ระดับเต็ม ในสถานการณ์ Power Query ตัวเชื่อมต่อจะถูกใช้ในโหมดอ่านอย่างเดียว โปรแกรมควบคุมส่วนใหญ่ต้องการรายงานระดับการปฏิบัติตามข้อกําหนดของ SQL_SC_SQL92_FULL และแทนที่ลักษณะการสร้าง SQL ที่เฉพาะเจาะจงโดยใช้ SQLGetInfoคุณสมบัติ และSQLGetFunctions |
SQL_SQL92_PREDICATES |
บิตมาสก์ที่ระบุเพรดิเคตที่ได้รับการสนับสนุนในคําสั่ง SELECT ตามที่กําหนดไว้ใน SQL-92 ไปที่ ค่าคงที่ SQL_SP_* ในข้อมูลจําเพาะ ODBC |
SQL_AGGREGATE_FUNCTIONS |
บิตมาสก์แจงนับการสนับสนุนสําหรับฟังก์ชันการรวม SQL_AF_ALL SQL_AF_AVG SQL_AF_COUNT SQL_AF_DISTINCT SQL_AF_MAX SQL_AF_MIN SQL_AF_SUM ไปที่ ค่าคงที่ SQL_AF_* ในข้อมูลจําเพาะ ODBC |
SQL_GROUP_BY |
ค่าจํานวนเต็มที่ระบุความสัมพันธ์ระหว่างคอลัมน์ในส่วนคําสั่ง GROUP BY และคอลัมน์ที่ไม่ได้รวมในรายการที่เลือก: SQL_GB_COLLATE: สามารถระบุส่วนคําสั่ง COLLATE ที่ส่วนท้ายของแต่ละคอลัมน์การจัดกลุ่ม SQL_GB_NOT_SUPPORTED: ระบบไม่รองรับส่วนคําสั่ง GROUP BY SQL_GB_GROUP_BY_EQUALS_SELECT: ส่วนคําสั่ง GROUP BY ต้องมีคอลัมน์ที่ไม่ได้รวมทั้งหมดในรายการที่เลือก ไม่สามารถมีคอลัมน์อื่นได้ ตัวอย่างเช่น เลือก DEPT, MAX(SALARY) จากกลุ่มพนักงานตาม DEPT. SQL_GB_GROUP_BY_CONTAINS_SELECT: ส่วนคําสั่ง GROUP BY ต้องมีคอลัมน์ที่ไม่ได้รวมทั้งหมดในรายการที่เลือก สามารถมีคอลัมน์ที่ไม่ได้อยู่ในรายการที่เลือก ตัวอย่างเช่น เลือก DEPT, MAX(SALARY) จากกลุ่มพนักงานตาม DEDEPARTMENT, AGE SQL_GB_NO_RELATION: คอลัมน์ในส่วนคําสั่ง GROUP BY และรายการที่เลือกไม่เกี่ยวข้องกัน ความหมายของคอลัมน์ที่ไม่ได้จัดกลุ่มและไม่ได้รวมในรายการที่เลือกจะขึ้นอยู่กับแหล่งข้อมูล ตัวอย่างเช่น เลือก DEDEPARTMENT, SALARY FROM EMPLOYEE GROUP BY DEDEPARTMENT, AGE ไปที่ ค่าคงที่ SQL_GB_* ในข้อมูลจําเพาะ ODBC |
ฟังก์ชันตัวช่วยต่อไปนี้สามารถใช้เพื่อสร้างค่าบิตมาสก์จากรายการค่าจํานวนเต็ม:
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
SQLGetTypeInfo สามารถระบุได้สองวิธี:
- ค่าคงที่
tableที่มีข้อมูลชนิดเดียวกับการเรียก ODBC ไปยังSQLGetTypeInfo - ฟังก์ชันที่ยอมรับอาร์กิวเมนต์ตาราง และส่งกลับตาราง อาร์กิวเมนต์ประกอบด้วยผลลัพธ์ดั้งเดิมของการเรียก ODBC ไปยัง
SQLGetTypeInfoการใช้งานฟังก์ชันของคุณสามารถแก้ไขหรือเพิ่มลงในตารางนี้ได้
วิธีการแรกใช้เพื่อแทนที่ค่าที่ส่งคืนโดยโปรแกรมควบคุม ODBC อย่างสมบูรณ์ วิธีที่สองจะใช้หากคุณต้องการเพิ่มหรือปรับเปลี่ยนค่าเหล่านี้
สําหรับรายละเอียดของรูปแบบของพารามิเตอร์ตารางชนิดและค่าที่ส่งคืนที่คาดไว้ ไปที่ การอ้างอิงฟังก์ชัน SQLGetTypeInfo
SQLGetTypeInfo โดยใช้ตารางแบบคงที่
ข้อมูลโค้ดต่อไปนี้มีการใช้งานแบบคงที่สําหรับ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 โดยใช้ฟังก์ชัน
ส่วนย่อยของโค้ดต่อไปนี้ผนวกชนิดเข้ากับ bpchar ชนิดที่มีอยู่ที่ส่งคืนโดยโปรแกรมควบคุม
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;
การตั้งค่าสตริงการเชื่อมต่อ
สตริงการเชื่อมต่อสําหรับโปรแกรมควบคุม ODBC ของคุณถูกตั้งค่าโดยใช้อาร์กิวเมนต์แรกของฟังก์ชัน Odbc.DataSource และ Odbc.Query ค่าอาจเป็นข้อความหรือระเบียน M เมื่อใช้เรกคอร์ด แต่ละฟิลด์ในเรกคอร์ดจะกลายเป็นคุณสมบัติในสตริงการเชื่อมต่อ สตริงการเชื่อมต่อทั้งหมดต้องมี Driver ฟิลด์ (หรือ DSN ฟิลด์หากคุณต้องการให้ผู้ใช้กําหนดค่า DSN ระดับระบบล่วงหน้า) คุณสมบัติที่เกี่ยวข้องกับข้อมูลประจําตัวถูกตั้งค่าแยกต่างหาก คุณสมบัติอื่นๆ เป็นคุณสมบัติเฉพาะของผู้ขับขี่
ส่วนย่อยของโค้ดด้านล่างแสดงคําจํากัดความของฟังก์ชันแหล่งข้อมูลใหม่ การสร้างConnectionStringเรกคอร์ด และการเรียกใช้ฟังก์ชัน 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;