J'ai un script qui contient plusieurs instructions select into qui se connectent à divers serveurs liés. Je veux être capable d'exécuter le script plusieurs fois mais dans chaque cas, les serveurs et les bases de données vont changer et quelques noms de tables changeront. J'espérais utiliser des variables pour définir les serveurs une fois à la fin avec quelque chose comme ce qui suit, mais bien sûr ils sortent de la portée car ils ne sont que des variables locales.Conserver la portée variable dans un script
declare @table_that_changes varchar(100)
declare @linked_server1 varchar(20)
declare @linked_server2 varchar(20)
declare @DB_onserver1 varchar(100)
declare @DB_onserver2 varchar(100)
select @linked_server1 = '[server109]',
@linked_server2 = '[server104]',
@DB_onserver1 = '[database203434]',
@DB_onserver2= '[database416541]',
@table_that_changes = 'LossTable_2191'
Quelle est la meilleure façon de conserver ces valeurs pour que je puisse faire le equivilant de (par exemple)
select * from @[email protected]_onserver1.dbo.table1
qui fonctionne à travers un script qui contient beaucoup d'instructions select?
Regardez ceci: ["Variables globales" dans SQL Server] (http://weblogs.sqlteam.com/mladenp/archive/2007/04/23/60185.aspx) – Fuad
Vous savez dans mon idée comment vous êtes attendre n'est pas possible.vous allez vous comporter avec une variable comme une base de données ou quelque chose comme ça. Je pense qu'il est préférable de stocker vos informations dans un tableau en tant que variables globales. – Fuad
Vous devrez tout faire en SQL dynamique, ce qui rendra les scripts moins lisibles - T-SQL est un langage simple, et où il attend un nom de base de données, il attend un * nom *, pas un * string * (ni, à son tour, une variable) –