2017-10-19 5 views
0

SQL Server 쿼리 where 절에서 sqsh 변수를 사용하려하지만 작동하게 만들 수 없습니다. 다음은 제가 직면하고있는 문제에 대한 단순한 시뮬레이션입니다. 누군가가이sqsh 스크립트에서 변수를 사용하는 것이 SQL 서버에서 쿼리하는 동안 작동하지 않습니다.

select * from information_schema.tables where table_name = 'PHONES'; 

을 예상하지만 당신은 SQL 버퍼를 살펴해야 다음은

\set tableName=PHONES; 

select * from information_schema.tables where table_name = $tableName; 
    Error Message:: Invalid column name 'PHONES' 

select * from information_schema.tables where table_name = '$tableName'; 
    No rows are returned as it searches for a table $tableName 

select * from information_schema.tables where table_name = "$tableName"; 
    Error Message:: Invalid column name 'PHONES'. 

답변

0

여기에 무슨 일이 일어나고 있는지 설명하기 위해 작동하지 않습니다으로 작동이

고정 도와 주실 래요 변수 확장 후 서버로 전송됩니다. 그렇게하기 위해서는 ';' 바로 가기를 입력하고 대신 다음 줄에 '\ go -e'를 입력하십시오 (따옴표 제외). 오류가 발생하면 SQL 버퍼가 나타나지 않을 것입니다. PHONES이 테이블의 열 이름으로 해석됩니다 여기

select * from information_schema.tables where table_name = PHONES 

이 열 이름이 존재하지 않습니다 그러나 이후, SQL 서버 오류 메시지로 응답 :에

첫 번째 줄은 확장됩니다. 변수는 sqsh에 의해 확장되고, 따라서 빈 결과 집합으로 서버로 전송되지 않습니다,

select * from information_schema.tables where table_name = '$tableName' 

인해 작은 따옴표로 :

두 번째 줄에 확장됩니다.

select * from information_schema.tables where table_name = "PHONES" 

이 더 문자열 검색 인수처럼 보이지만 인해 QUOTED_IDENTIFIER 옵션은 기본적으로 아마도 사실, SQL 서버는 여전히 열을 찾고있다 :

세 번째 줄에 확장됩니다 PHONES라는 이름.

이 문제를 해결하려면 작은 따옴표를 제공해야하지만 여전히 sqsh에서 변수를 확장해야합니다. 다음과 같이 작은 따옴표를 이스케이프 처리하면됩니다.

select * from information_schema.tables where table_name = \\'$tableName\\'; 

희망이 있습니다.

+0

은 챔피언처럼 일했습니다. – kishore