ฉันกำลังเขียนขั้นตอนการจัดเก็บที่ใช้ชื่อฐานข้อมูลเป็นอาร์กิวเมนต์และส่งกลับตารางของดัชนีของฐานข้อมูลและระดับการกระจายตัวของพวกเขา ขั้นตอนการจัดเก็บนี้จะอยู่ในฐานข้อมูล DBA ของเรา (ฐานข้อมูลที่มีตารางที่ DBA ใช้สำหรับการตรวจสอบและปรับปรุงสิ่งต่าง ๆ ) ระบบที่เป็นปัญหาคือ SQL Server 2008 R2 ทั้งหมดหากมีความแตกต่าง
ฉันมีการสืบค้นพื้นฐานแล้ว แต่ฉันพยายามหาชื่อจริงของดัชนี เพื่อความรู้ที่ดีที่สุดของฉันข้อมูลนั้นจะอยู่ในมุมมอง sys.indexes ของแต่ละคน ปัญหาเฉพาะของฉันพยายามอ้างอิงที่ดูโดยทางโปรแกรมจากกระบวนงานที่เก็บไว้ของฐานข้อมูลอื่น
เพื่อแสดงให้เห็นว่านี่เป็นส่วนของแบบสอบถามที่มีปัญหา:
FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p
INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id]
AND p.index_id = b.index_id
AND b.index_id != 0
แบบสอบถามทำงานได้ดีเมื่อดำเนินการจากฐานข้อมูลที่ระบุโดย @db_id เนื่องจากใช้มุมมอง sys.indexes ที่เหมาะสม ถ้าฉันพยายามเรียกสิ่งนี้จากฐานข้อมูล DBA ทุกอย่างจะเป็นโมฆะเนื่องจากมุมมอง sys.indexes มีไว้สำหรับฐานข้อมูลที่ไม่ถูกต้อง
โดยทั่วไปฉันต้องทำสิ่งนี้:
DECLARE @db_name NVARCHAR(255) = 'my_database';
SELECT * FROM @db_name + '.sys.indexes';
หรือ
USE @db_name;
ฉันได้ลองเปลี่ยนฐานข้อมูลหรืออ้างอิงฐานข้อมูลอื่นโดยใช้การรวมสตริงเข้าด้วยกันและฟังก์ชัน OBJECT_NAME / OBJECT_ID / DB_ID และดูเหมือนว่าจะไม่มีอะไรทำงาน ฉันขอขอบคุณแนวคิดใด ๆ ที่ชุมชนอาจมี แต่สงสัยว่าฉันจะต้องปรับกระบวนการจัดเก็บนี้ใหม่เพื่อให้อยู่ในฐานข้อมูลแต่ละรายการ
ขอบคุณล่วงหน้าสำหรับคำแนะนำใด ๆ