แชร์ผ่าน


พารามิเตอร์สําหรับ Odbc.DataSource

ฟังก์ชัน 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;

ขั้นตอนถัดไป