2013-02-06 3 views
0

IP 주소에서 데이터베이스를 복원하고 데이터베이스에 몇 개의 .sql 파일을 실행하는 배치 파일을 만듭니다. 몇 가지 .sql 파일에는 선언되고 설정된 변수가 있습니다. 그러나이 프로세스는 각 시스템의 각 변수에 대해 서로 다른 값을 가진 여러 시스템에서 수행되어야합니다..sql 파일에서 변수 값을 변경할 수있는 배치 스크립트 명령이 있습니까?

그래서 IP의 사용자 입력을 통해 데이터베이스를 복원 할 수 있지만 일괄 스크립트 명령을 사용하여 변수 값을 변경하는 방법을 모르겠습니다.

예를 들어, .sql 파일 중 하나에서 변수 @store가 선언되고 임의의 숫자로 설정됩니다. 배치 파일을 통해 그 번호를 변경하고 싶습니다. 나는 윈도우 2008 R2

답변

1

당신이 유닉스/리눅스 시스템에서 작업하는 경우 명시 SQL 서버를 사용하고

, 당신은 문자열을 검색 할 sed를 사용할 수 있습니다.

예 :

$ sed 's/127.0.0.1/192.168.1.1/g' script.sql > newScript.sql 

이것은 script.sql에 기존 IP를 대체하고 newScript.sql이 스크립트의 복사본을 저장합니다 : 당신이 192.168.1.1127.0.0.1를 교체해야 가정, 다음과 같은 명령을 사용할 수 있습니다.

윈도우에서, 어떻게해야할지 모르겠다. 위와 똑같이 Cygwin을 다운로드하고 설치할 수있다.

희망이 도움이됩니다.

+0

의 Cygwin은 Windows에서 GNU/리눅스 도구를 얻을 절대적으로 unnessary입니다. Cygwin을 필요로하지 않는 몇몇 고유 포트가 있습니다 –

+0

@a_horse_with_no_name 당신은 Windows에서 sed를 사용하는 또 다른 방법을 알고 있습니까? \ –

+1

@a_horse_with_no_name 그들과 우리를 공유 할 수 있습니까? 나는 리눅스 사용자 (그리고 팬)이다. 그러나 그것들은 – Barranka

4

"scripting variables"을 SQLCMD와 함께 사용할 수 있습니다.

는 여기에 MSDN 페이지에서 예입니다 :

또한 스크립트에 존재하는 스크립트 변수를 설정하려면 -v 옵션을 사용할 수 있습니다. 다음 스크립트 (파일 이름은 testscript.sql)에서 ColumnName은 스크립팅 변수입니다.

USE AdventureWorks2012;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE c.BusinessEntityID < 5;

그런 다음 당신은 -v 옵션을 사용하여 반환 할 열 이름을 지정할 수 있습니다

sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql

를 반환하려면 동일한 스크립트를 사용하여 다른 열, ColumnName의 값을 변경하십시오. cripting 변수.

sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql

+0

고맙습니다. 이것은 나를 도왔다. – Alkey29

관련 문제