2013-05-14 1 views
0

여러 연결된 서버에 연결하는 select into 문을 가진 스크립트가 있습니다.스크립트 전체에 가변 범위 유지하기

스크립트를 여러 번 실행할 수 있지만 각 경우 서버와 데이터베이스가 변경되어 몇 가지 테이블 이름이 변경됩니다.

나는 다음 세대와 같이 일종의 일원으로 서버를 정의하기 위해 변수를 사용하기를 바랬지 만 물론 그들은 지역 변수이기 때문에 범위를 벗어납니다.

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' 

내가의 equivilant을 할 수 있도록이 값을 저장하는 가장 좋은 방법은 무엇입니까 select 문이 많이 포함 된 스크립트를 통해 작동

select * from @[email protected]_onserver1.dbo.table1 

(예를 들어)?

+0

[SQL Server의 전역 변수] (http://weblogs.sqlteam.com/mladenp/archive/2007/04/23/60185.aspx) – Fuad

+0

u 내 생각에 당신의 방식을 잘 알고 있습니다. 기대는 불가능합니다. 여러분은 데이터베이스와 같은 변수 또는 그와 비슷한 변수로 행동 할 것입니다. 여러분의 정보를 전역 변수로 테이블에 저장하는 것이 더 좋습니다. – Fuad

+0

모든 것을 동적 SQL로 처리해야 스크립트를 읽기 쉽게 만들 수 있습니다. T-SQL은 간단한 언어이며 데이터베이스 이름이 필요한 곳에서는 * 문자열 *이 아닌 * 이름 *을 기대합니다. 도 아니다, 변수) –

답변

0

,하지만 한 가지 방법은 (테스트하지)

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' 

declare @sql varchar(1000) 

set @sql = 'create view linked1.table1 as select * from ' + 
      @linked_server2 + '.' + @DB_onserver1 + '.table1' 

exec(@sql) 
+0

멋지 네요, 고마워요.하지만 제 코드를 읽으려고 애 쓰고 있어요! – simon77

-1

스크립트에 GO가 없으면 변수는 스크립트 전체에 걸쳐 있어야합니다. 내 생각 엔 명령문을 다시 시작하고 할당 된 변수를 지우는 1 개 이상의 GO가 있습니다. 당신이 원하는하지 정확히

+1

이것은 실제로 질문에 대답하지 않습니다. Op는 동적 인 SQL 없이는 할 수없는 일을하고 싶습니다. GO와 전혀 상관 없습니다. – Lamak

0

이미 서로를 인정했습니다 있지만의 라인을 따라 동적 SQL을 사용하여 원격 서버에서 테이블에 스크립트를 전망하는 것 대답, SQLCMD scripting variables 정확히 이런 종류의 작업을 처리하기위한 것입니다.