Diberikan SourceTable dan TargetTable, saya ingin secara terprogram membuat string dengan semua gabungan yang diperlukan.
Singkatnya, saya mencoba menemukan cara untuk membuat string seperti ini:
FROM SourceTable t
JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn
JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn
Saya memiliki kueri yang mengembalikan semua kunci asing untuk tabel yang diberikan, tetapi saya mengalami keterbatasan dalam mencoba menjalankan semua ini secara rekursif untuk menemukan jalur gabungan yang optimal dan membuat string.
SELECT
p.name AS ParentTable
,pc.name AS ParentColumn
,r.name AS ChildTable
,rc.name AS ChildColumn
FROM sys.foreign_key_columns fk
JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id
JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fk.referenced_column_id
JOIN sys.tables p ON p.object_id = fk.parent_object_id
JOIN sys.tables r ON r.object_id = fk.referenced_object_id
WHERE fk.parent_object_id = OBJECT_ID('aTable')
ORDER BY ChildTable, fk.referenced_column_id
Saya yakin ini telah dilakukan sebelumnya, tetapi sepertinya saya tidak dapat menemukan contoh.
OrderItems
denganOrders
dan kembali denganOrderItems
.Jawaban:
Saya punya skrip yang melakukan versi dasar dari kunci asing. Saya mengadaptasinya dengan cepat (lihat di bawah), dan Anda mungkin dapat menggunakannya sebagai titik awal.
Diberikan tabel target, skrip mencoba untuk mencetak string bergabung untuk jalur terpendek (atau salah satu dari mereka dalam kasus ikatan) untuk semua tabel sumber yang mungkin sehingga kunci asing satu kolom dapat dilintasi untuk mencapai tabel target. Script tampaknya berfungsi dengan baik pada database dengan beberapa ribu tabel dan banyak koneksi FK yang saya coba.
Seperti yang disebutkan orang lain di komentar, Anda harus membuat ini lebih rumit jika Anda perlu menangani kunci asing multi-kolom. Perlu diketahui juga bahwa ini bukan kode yang siap produksi dan sudah teruji sepenuhnya. Semoga ini adalah titik awal yang bermanfaat jika Anda memutuskan untuk membangun fungsionalitas ini!
sumber
Anda dapat meletakkan daftar kunci tabel dengan dua bidang TAB_NAME, KEY_NAME untuk semua tabel yang ingin Anda sambungkan.
Contoh, untuk tabel
City
demikian juga
Province
danCountry
.Kumpulkan data untuk tabel dan masukkan ke dalam satu tabel (misalnya tabel Metadata)
Sekarang konsep permintaan seperti di bawah ini
Ini akan membantu Anda bagaimana Anda menautkan tabel berdasarkan kunci yang cocok (nama kunci yang sama)
Jika menurut Anda nama tombol mungkin tidak cocok, Anda dapat memasukkan bidang kunci alternatif dan mencoba menggunakannya dalam kondisi di mana.
sumber
sys
tabel yang ada di SQL Server yang menggambarkan kolom dalam tabel, bagaimana tabel dihubungkan bersama, dll. Semua yang sudah ada. Membangun tabel Anda sendiri yang menentukan struktur tabel Anda untuk memenuhi kebutuhan tertentu bisa menjadi posisi mundur, tetapi jawaban yang disukai akan menggunakan apa yang sudah ada, seperti jawaban yang diterima .