ฉันจะรับรายการตารางที่แบ่งพาร์ติชันทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันควรดูตารางระบบ / DMVs ใด
ฉันจะรับรายการตารางที่แบ่งพาร์ติชันทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันควรดูตารางระบบ / DMVs ใด
คำตอบ:
แบบสอบถามนี้ควรให้สิ่งที่คุณต้องการ:
select distinct t.name
from sys.partitions p
inner join sys.tables t
on p.object_id = t.object_id
where p.partition_number <> 1
sys.partitions
มุมมองแคตตาล็อกให้รายชื่อของพาร์ทิชันทั้งหมดสำหรับตารางและดัชนีมากที่สุด เพียงแค่เข้าร่วมที่ด้วยที่sys.tables
จะได้รับตาราง
ตารางทั้งหมดมีอย่างน้อยหนึ่งพาร์ติชันดังนั้นหากคุณกำลังมองหาตารางที่แบ่งพาร์ติชันโดยเฉพาะคุณจะต้องกรองแบบสอบถามนี้โดยอ้างอิงจากsys.partitions.partition_number <> 1
(สำหรับตารางที่ไม่ได้แบ่งพาร์ติชันpartition_number
จะเท่ากับ 1 เสมอ)
partition_id
ในคำสั่ง WHERE partition_number
ของคุณที่คุณต้องการ ขอโทษด้วย.
ทำเคียวรีให้ดีขึ้นมีดังนี้:
select object_schema_name(i.object_id) as [schema],
object_name(i.object_id) as [object],
i.name as [index],
s.name as [partition_scheme]
from sys.indexes i
join sys.partition_schemes s on i.data_space_id = s.data_space_id
สิ่งนี้จะดูที่ 'เหมาะสม' เพื่อระบุรูปแบบพาร์ติชัน: sys.partition_schemes
มันมีความสำคัญทางด้านขวา (ไม่จำเป็นdistinct
) มันจะแสดงเฉพาะวัตถุที่ถูกแบ่งพาร์ติชัน (ไม่จำเป็นต้องมีwhere
ส่วนคำสั่งการกรอง) มันจะฉายชื่อสกีมา โปรดสังเกตว่าการสืบค้นนี้เน้นข้อบกพร่องของคำถามต้นฉบับอย่างไร: ไม่ใช่ตารางที่มีการแบ่งพาร์ติชัน แต่ดัชนี (ซึ่งรวมถึงดัชนี 0 และ 1, aka. heap และดัชนีคลัสเตอร์) ตารางสามารถมีดัชนีได้หลายดัชนีบางพาร์ติชั่นบางอย่างไม่มี
ถ้างั้นวิธีรวม 2:
select
object_schema_name(i.object_id) as [schema],
object_name(i.object_id) as [object_name],
t.name as [table_name],
i.name as [index_name],
s.name as [partition_scheme]
from sys.indexes i
join sys.partition_schemes s on i.data_space_id = s.data_space_id
join sys.tables t on i.object_id = t.object_id