У меня есть хранимая процедура, которая ссылается на связанный сервер. В нескольких местах на протяжении всей процедуры у меня есть что-то вроде следующего:
INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Эта процедура существует в моей среде разработки, тестовой среде и среде Live.
Проблема в том, что каждая копия процедуры немного отличается, потому что имена серверов различны для каждой среды. Это делает управление развертыванием обновлений скрипта проблематичным.
Есть ли способ сделать процедуру переносимой, чтобы каждая среда могла запускать идентичные ее версии?
Если нет, могу ли я что-нибудь сделать, чтобы развертывание скриптов было менее подвержено ошибкам / ошибкам?
sql-server
sql-server-2008
stored-procedures
linked-server
Доктор джонс
источник
источник
SELECT <fields> FROM <linked server>
но использовать одно и то же имя представления на всех серверах, чтобы сохранить кодОтветы:
Имя вашего связанного сервера не обязательно должно быть именем сервера. Вы можете использовать общее имя.
Настройте связанный сервер в каждой среде с тем же именем, но на самом деле укажите их на разных серверах.
источник
Мне нравится идея использовать общее имя связанного сервера. Однако во многих средах это может оказаться невозможным. В этом случае вы можете использовать динамический SQl в вашем sp.
источник