Ich habe eine gespeicherte Prozedur, die auf einen Verbindungsserver verweist. An mehreren Stellen während des Verfahrens habe ich ungefähr Folgendes:
INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Dieses Verfahren ist in meiner Entwicklungsumgebung, Testumgebung und Live-Umgebung vorhanden.
Das Problem ist, dass jede Kopie der Prozedur geringfügig unterschiedlich ist, da die Servernamen für jede Umgebung unterschiedlich sind. Dies erschwert die Verwaltung der Bereitstellung von Skriptaktualisierungen.
Gibt es eine Möglichkeit, das Verfahren portabel zu machen, sodass in jeder Umgebung identische Versionen davon ausgeführt werden können?
Wenn nicht, kann ich etwas tun, um die Skriptbereitstellung weniger fehleranfällig zu machen?
sql-server
sql-server-2008
stored-procedures
linked-server
Doktor Jones
quelle
quelle
SELECT <fields> FROM <linked server>
aber auf allen Servern denselben Ansichtsnamen verwenden, um den Code beizubehaltenAntworten:
Der Name Ihres Verbindungsservers muss nicht der Name des Servers sein. Sie können einen generischen Namen verwenden.
Richten Sie den Verbindungsserver in jeder Umgebung mit demselben Namen ein, zeigen Sie ihn jedoch tatsächlich auf verschiedene Server.
quelle
Ich mag die Idee, einen generischen Verbindungsservernamen zu verwenden. In vielen Umgebungen ist dies jedoch möglicherweise nicht möglich. In diesem Fall können Sie dynamisches SQl in Ihrem SP verwenden.
quelle