Saya punya prosedur tersimpan yang merujuk ke server yang ditautkan. Di beberapa tempat selama prosedur, saya memiliki sesuatu seperti berikut:
INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Prosedur ini ada di lingkungan Pengembangan saya, lingkungan Uji dan lingkungan Langsung.
Masalahnya adalah bahwa setiap salinan prosedur ini agak berbeda karena nama server berbeda untuk setiap lingkungan. Ini membuat mengelola penyebaran pembaruan skrip menjadi sulit.
Apakah ada cara untuk membuat prosedur ini portabel sehingga setiap lingkungan dapat menjalankan versi identiknya?
Jika tidak, adakah yang bisa saya lakukan untuk membuat penyebaran skrip kurang rentan terhadap kesalahan / kesalahan?
sql-server
sql-server-2008
stored-procedures
linked-server
Dokter Jones
sumber
sumber
SELECT <fields> FROM <linked server>
tetapi menggunakan nama tampilan yang sama di semua server untuk menjaga kode tetap dipertahankanJawaban:
Nama server tertaut Anda tidak harus nama server. Anda dapat menggunakan nama generik.
Siapkan server yang ditautkan pada setiap lingkungan dengan nama yang sama, tetapi sebenarnya arahkan mereka ke server yang berbeda.
sumber
Saya suka gagasan menggunakan nama server tertaut generik. Namun, di banyak lingkungan ini tidak mungkin, Dalam hal ini, Anda dapat menggunakan SQl dinamis di sp Anda.
sumber