OSQL 이란 도스나 콘솔상에서 SQL 문을 실행할수 있게 하는 프로그램이다.
주로 쿼리문 실행할라면 쿼리분석기, EM 을 이용하는데 어떤 경우에는 도스로 쿼리문을
실행해야 할 경우가 생긴다. 이때 이 OSQL 이란 프로그램을 사용한다.
참고로 나의 테스트 환경은 MS-SQL 7.0이다. SQL 2000도 물론 가능한데 6.5 버젼은 어떤지 모르겠다.
그리고 OSQL은 MS-SQL 설치하면 자동으로 설치되는 프로그램이다. 환경변수로 잡혀있으므로
그냥 도스상 어느 디렉토리에서도 OSQL 실행 가능하다.(Copy가 명령어 어디서든지 가능한것 처럼)
간단한 OSQL 사용
자 그럼 사용해 보자. 사용법은 간단하다. 일단 도스창을 연 후 아래의 구문을 실행해 보자.
그럼 다음과 같은 결과가 보일것이다.
osql -Usa -P -Q "select * from Northwind..Region"

구문을 살펴보자 아래를 보면 색으로 구분을 줘서 더 살펴보기 쉬울꺼다.
그래도 굳이 설명하자면 -U는 사용자, -P는 암호, -Q는 쿼리문이다. 따라서
아래 구문을 해석하면 'sa란 사용자로(암호는 없음) select * from Northwind..Region 쿼리문을 실행해라' 라고 볼 수 있다.
주의 : -U, -P 등 플래그들은 대소문자를 구분한다.!!
osql -Usa -P -Q "select * from Northwind..Region"
방금전 구문은 로컬 DB에 엑서스 했을 경우이다. 다른 네트워크 상의 DB 내용을 보려면 다음과 같이 하면 된다.
osql -Smungchung -Usa -P1234 -Q "select * from Northwind..Region"
위의 구문을 보면 -Smungchung 이 추가됨을 알 수 있다. -S는 서버 플래그를 나타내고 mungchung는 서버명을 나타낸다.
해석해 보자면 'mungchung란 서버에 아이디 sa 암호 1234로 로그인 한 후 select * from Northwind..Region 쿼리문을 실행시켜라' 이다.
파일을 이용한 OSQL
지금까지는 아주 단순한 쿼리문을 실행했는데 쿼리문이 길어진다고 하면 어떻게 할까? 도스창에서
그 길고긴 쿼리들 다 적기는 무리일 것이다. -_-; (오타라도 하나 나면 -_-;; 수정하기 쉽지 않다.)
여기 osql에 i라는 플래그가 있다. 입력 파일 플래그를 뜻하는데 이 플래그를 사용하면 파일의 내용을 실행한다.
메모장으로 다음 내용을 입력한 후 test.sql 이라는 파일명으로 저장한다. (확장자는 사실 아무거나 해도 상관없다.
test.txt로 해도 아무 상관 없다. 하지만 sql 확장자가 쿼리분석기에서 사용되므로 확장자를 sql로 하였다.)
USE NorthWind
SELECT a.ProductID, b.SupplierID, a.ProductName, b.CompanyName
FROM Products a
JOIN Suppliers b
ON a.SupplierID = b.SupplierID
WHERE a.ProductID < 4
도스나, 콘솔창을 연 후 다음 구문을 실행한다.
osql -Usa -P -i d:\test.sql

OSQL 응용 범위
osql은 단순히 도스상에서 sql명령어 이용하라고 만들어진것은 아니다. 요새 도스 이용하는 사람도 없는데
왜 이 osql이 MS-SQL 버젼이 높아져도 없어지지 않을까? 솔직히 나도 100%로 왜 그런지는 모르지만 어디서 유용하게 쓰이는지는 안다.
얄팍한 경험으로 비춰보면 osql은 다른 시스템간에 인터페이스 할때 이용되거나 백업할때 이용된다. 이 osql을 이용할경우
도스로 배치스크립트 작성해서 매일 매일 해야하는 작업이나 주단위 작업등을 간편하고 빠르게 해결 할수 있다.
나중에 기회가 된다면 이 osql을 좀더 멋지게 이용하는 방법을 적어보겠다.
OSQL 구문
다음은 osql 에서 사용되는 구문이다. 몇가지 빠진 플래그들이 있지만
다음에 나온는 플래그들만 해도 충분할것이다. ( [] 로 묶여진 플래그들은 생략 가능한
플래그다.) 좀더 자세하게 osql 에 대해서 알고자 한다면 도움말을 참고하기 바란다.
osql
-U<로그인ID>
[-d]
[-Q"쿼리문"]
[-q"쿼리문"]
[-c<명령종료자"]
[-h<헤더들>]
[-w<열너비>]
[-s<열구분기호>]
[-t<제한시간>]
[-m<오류수준>]
[-H<워크스테이션이름>]
[-P<암호>]
[-S<서버이름>]
[-i<입력파일>]
[-o<출력파일>]
[-a<패킷크기>]
[-l<제한시간>]
*) 참고도서 : Professional SQL Server 2000 Programming (Wrox.) 437p