SQLCMD 모드에서 변수 설정


13

SQL Server 2008 R2 Enterprise Edition 사용

다음 진술을 고려하십시오.

:setvar source_server_name "SERVERNAME\INSTANCENAME"

SQLCMD 모드에서 TSQL을 사용하여 해당 값을 얻을 수 있습니까?

다음과 같은 것 : :setvar source_server_name = SELECT @@servername

감사합니다

2013 년 7 월 15 일 업데이트

아래에 제공된 두 가지 답변으로 원하는 결과를 얻지 못했기 때문에 더 관련성 높은 시험을 추가하고 있습니다.

:setvar source_server_name [myserver]

source_server_name 변수가 텍스트 문자열 [myserver_1]로 설정되었습니다.

이 작업을 수행하고 싶습니다.

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1

source_server_name 변수는 id 1에 대한 서버의 값으로 설정됩니다.


내가 알고 있거나 알아낼 수는 없습니다.

1
sqlcmd 변수는 sql이 서버로 전송되기 전에 클라이언트에서 평가되기 때문에 요청하는 것은 가능하지 않습니다. 따라서 SQL 서버가 절대 보지 않는 변수의 값을 설정하도록 요청하고 있습니다. sqlcmd 변수를 사용하여 SQL 스크립트에서 SQL 프로파일 러 추적을 실행하면 모두 이미 평가 된 것을 볼 수 있습니다.
Tim Abell

답변:


9

결과를 파일로 출력하고 다시 가져와야한다고 생각합니다. 이와 같은 내용을 사용하면 찾고있는 내용에 가까이 갈 수 있습니다.

:setvar MyDir "C:\scripts"
:OUT $(MyDir)\test.txt
PRINT ':SETVAR ServerName ''' + @@SERVERNAME + ''''
GO
:OUT stdout
:r $(MyDir)\test.txt
GO
SELECT $(ServerName)

더 많은 예제를 여기에서 볼 수 있습니다 .


감사합니다. 나는 이미 일을 그만두고 월요일에 당신의 제안을 시험해볼 것입니다
Craig Efrein

내 질문을 업데이트했습니다
Craig Efrein

이 답변이 가장 유용한 것으로 판명되었습니다.
Craig Efrein

1
여기서 중요한 부분은 1) SETVAR 파일을 생성하고, 2) 스크립트 변수를 초기화하고, 마지막으로 3) 스크립트 변수를 사용하기 위해 별도의 배치를 가져야한다는 것입니다.
Andriy M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.