2013-07-19 4 views
0

에게 환경 무시 sqsh이 필요 : 솔라리스 10/석사 SQL 서버달러 기호

에 (TLDR) 문제 얘기 sqsh 및 FreeTDS를를 사용하여 빈/SH 스크립트 : 내가 필요를 sqsh는 달러 기호를 무시하고이를 MS SQL에 전달합니다.

는 배경 : 나는 동적으로 기존 인덱스를 변경하는 SQL을 기반으로하지만 실행시 나는 오류를 얻을 몇 가지 코드를 쓰고 있어요는 :

Msg 2727, Level 11, State 1 
Server 'HOST\SERVER', Line 1 
Cannot find index 'foo'. 

내가 주위를 파고 볼 수는 인덱스가 없음 foo이라고하지만 이고 이름은 foo$bar입니다.

내장 최대 입력 SQL 입력이 잘 보이는

...

% grep 'foo' input.sql 
alter index [foo$bar] on ... 

... 그리고 새 쿼리 세션을 통해이 SQL 또는 제 3 자 응용 프로그램을 실행이 성공합니다. 그러나 sqsh 통과 결과는 달러 기호 과거 볼 수 없습니다 :이 변수이나 뭐 같은 $bar 해석 제안합니다

% sqsh -e -i input.sql -o output.sql 
% grep 'foo' output.sql 
1> alter index [foo] on ... 

을 ....

누구나 달러 기호를 이스케이프 처리하거나 패스 할 수있는 방법을 아는 사람이 있습니까? 따옴표와 백 슬래시의 다양한 조합을 시도했습니다.

도와주세요, stackoverlow. 너는 내 유일한 희망이야. 5 페이지의 상태에

답변

1

참조 설명서 :

1> \echo \\$name 
$name 

그래서, 저는 믿습니다 : 는 "이렇게 같이 작은 따옴표, 또는 두 개의 \ '의 두 변수 사용의 확장을 발생하지 않도록주의 즉 빈 문자열로 $ 줄을 대체 할 sqsh을 방지하기 위해, 당신은 같은 것을 쓰고 있습니다.

alter index [foo\\$bar] on ... 
alter index ['foo$bar'] on ... 

당신이 SELECT 'foo\\$bar' = 1 또는 비슷한 먼저 시도 할 수 있습니다 그것을 테스트를

+0

정확하게이 문서 참조 및 해결책을 찾고 있습니다. 빠른 재 작성과 SQL은 예상대로 실행됩니다. 많이 고마워. –

1

또 다른 옵션은 실행하여 모두 버퍼 확장을 비활성화하는 것입니다 다음 sqsh 프롬프트에

\set expand=0 

, 또는 .sqshrc 파일에이 명령을 지정하거나 매개 변수를 sqsh을 시작

sqsh -e -i input.sql -o output.sql -Lexpand=0 

하는 경우 확장이 켜져 있으면 (기본값) sqsh는 변수 $ bar를 내용으로 대체합니다.