Saya memiliki server yang tertaut yang akan berubah. Beberapa prosedur memanggil server yang terhubung seperti ini: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE
. Kami telah memicu juga melakukan pekerjaan semacam ini. Kita perlu menemukan semua tempat yang digunakan [10.10.100.50]
untuk mengubahnya.
Dalam SQL Server Management Studio Express, saya tidak menemukan fitur seperti "temukan di seluruh database" di Visual Studio. Dapatkah sys-select khusus membantu saya menemukan apa yang saya butuhkan?
sql-server
stored-procedures
triggers
linked-server
Victor Rodrigues
sumber
sumber
type = 'C'
)?Anda dapat menemukannya seperti
Ini akan mencantumkan nama prosedur tersimpan yang berbeda yang berisi teks seperti 'Pengguna' di dalam prosedur tersimpan. Info lebih lanjut
sumber
syscomments
tabel menyimpan nilai dalam potongan 8.000 karakter, jadi jika Anda kurang beruntung untuk memiliki teks yang Anda cari terpecah di salah satu batas ini, Anda tidak akan menemukannya dengan metode ini.[Jawaban telat tapi semoga bermanfaat]
Menggunakan tabel sistem tidak selalu memberikan hasil yang benar 100% karena mungkin ada kemungkinan beberapa prosedur dan / atau tampilan tersimpan dienkripsi dalam hal ini Anda harus menggunakan koneksi DAC untuk mendapatkan data yang Anda butuhkan.
Saya akan merekomendasikan menggunakan alat pihak ketiga seperti Pencarian ApexSQL yang dapat menangani objek yang dienkripsi dengan mudah.
Tabel sistem Syscomments akan memberikan nilai nol untuk kolom teks jika objek dienkripsi.
sumber
sumber
Ini akan bekerja untuk Anda:
sumber
type = 'C'
)?Ada banyak solusi yang lebih baik daripada memodifikasi teks dari prosedur, fungsi, dan tampilan yang disimpan setiap kali server yang ditautkan berubah. Berikut ini beberapa opsi:
Perbarui server yang ditautkan. Alih-alih menggunakan server tertaut yang dinamai dengan alamat IP-nya, buat server tertaut baru dengan nama sumber daya seperti
Finance
atauDataLinkProd
atau semacamnya. Kemudian ketika Anda perlu mengubah server mana yang tercapai, perbarui server yang ditautkan untuk menunjuk ke server baru (atau jatuhkan dan buat ulang).Meskipun sayangnya Anda tidak dapat membuat sinonim untuk server atau skema yang ditautkan, Anda BISA membuat sinonim untuk objek yang berada di server yang ditautkan. Misalnya, prosedur Anda
[10.10.100.50].dbo.SPROCEDURE_EXAMPLE
bisa dengan alias. Mungkin buat skemadatalinkprod
, kalau begituCREATE SYNONYM datalinkprod.dbo_SPROCEDURE_EXAMPLE FOR [10.10.100.50].dbo.SPROCEDURE_EXAMPLE;
. Kemudian, tulis prosedur tersimpan yang menerima nama server yang ditautkan, yang menanyakan semua objek potensial dari basis data jauh dan (kembali) membuat sinonim untuknya. Semua SP dan fungsi Anda dapat ditulis ulang hanya sekali untuk menggunakan nama sinonim yang dimulai dengandatalinkprod
, dan setelah itu, untuk mengubah dari satu server tertaut ke yang baru saja Anda lakukanEXEC dbo.SwitchLinkedServer '[10.10.100.51]';
dan dalam sepersekian detik Anda menggunakan server tertaut yang berbeda.Mungkin ada lebih banyak pilihan. Saya sangat merekomendasikan menggunakan teknik unggul pra-pemrosesan, konfigurasi, atau tipuan daripada mengubah skrip yang ditulis manusia. Secara otomatis memperbarui skrip yang dibuat oleh mesin tidak masalah, ini adalah preprocessing. Melakukan hal-hal secara manual sangat buruk.
sumber
sumber
Yang ini saya coba di SQL2008, yang dapat mencari dari semua db sekaligus.
sumber
Saya menggunakan ini untuk bekerja. tinggalkan [] di bidang @TEXT, sepertinya ingin mengembalikan semuanya ...
sumber
Saya telah menggunakan ini di masa lalu:
Dalam kasus khusus ini, di mana Anda perlu mengganti string tertentu di seluruh prosedur tersimpan, tautan pertama mungkin lebih relevan.
Sedikit di luar topik, tambahan Cari Cepat juga berguna untuk mencari nama objek dengan SQL Server Management Studio. Ada versi modifikasi yang tersedia dengan beberapa perbaikan, dan versi lain yang lebih baru juga tersedia di Codeplex dengan beberapa tambahan tambahan yang bermanfaat juga.
sumber
Pencarian apa pun dengan pernyataan pilih menghasilkan hanya nama objek Anda, tempat kata kunci pencarian berisi. Cara termudah dan efisien adalah mendapatkan skrip prosedur / fungsi dan kemudian mencari dalam file teks yang dihasilkan, saya juga mengikuti teknik ini :) Jadi, Anda tepat pinpoint.
sumber
sumber
Hanya menulis ini untuk ref lintas silang luar penuh generik
sumber
Anda dapat mencari di dalam definisi semua objek basis data menggunakan SQL berikut:
sumber