2009-04-10 2 views
0

이것은 MS SQL 2005 용입니다. 누구나 처음 성공한 이유를 알 수 있습니다. 그런 다음 연속해서 동일한 명령문 두 개가 실패합니다. 모든 진술은 정확히 동일합니다. 큰 따옴표를 두 개의 작은 따옴표로 변경하면 동일한 효과가 나타납니다.sp_MSforeachdb MS SQL 오류

sp _ MSforeachdb @ command1 = 'if (left ("?", 2) = "p _") 시작; 인쇄 "?"; 종료;';

페이지를 _ NationalBrands
페이지 _ NonBrand
페이지 _ 데이터베이스 __으로 _ P _ 언더

하지만

을 시작 _ 그건 _ 이름을 생성 sp _ MSforeachdb @ command1 = 'if (왼쪽 ("?", 2) = "p _") 시작; 인쇄 "?"; 종료;';
sp _ MSforeachdb @ command1 = 'if (왼쪽 ("?", 2) = "p _") 시작; 인쇄 "?"; 종료;';

메시지 102, 수준 15, 상태 1, 줄 2 근처의 구문이 잘못되었습니다 'sp_MSforeachdb'을 생산하고 있습니다.

당신은 그 방법으로 여러 발동를 호출 할 때 명시 적으로 Exec에서 사용할 필요가

답변

1

여러 저장된 프로 시저 호출은 각각의 하나는 EXEC (UTE) 난 항상 QUOTED_IDENTIFERS 환경 설정에 문제를 방지하기 위해 2 개 단일 인용하지 따옴표를 사용하십시오

EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;'; 
EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;'; 

이 필요합니다.

+0

실제로 첫 번째 호출 이후에만 exec가 필요합니다. (개인적으로 나는 스타일의 문제로 두 가지 모두에 적용 할 것이지만 필수는 아닙니다.) – cmsjr

1

, 저장 프로 시저

와 함께 EXECUTE 사용 Execute

에 대한 문서에서

sp_MSforeachdb @command1 = 'if (left("?", 2) = "p_") begin; print "?"; end;'; 
exec sp_MSforeachdb @command1 ='if(left("?", 2) = "p_") begin; print "?"; end;'; 

시도 저장된을 실행할 때 EXECUTE 키워드를 지정할 필요가 없습니다. 명령문이 첫 번째 일괄 처리 일 때 절차. 같은 배치의