집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇입니까?
"스칼라 변수를 선언해야 한다"의 비밀
SQL 저장 프로시저 영역에서 다음과 같은 전역 입력 매개변수를 활용하려는 시도 동적으로 생성된 SQL 문 내의 "@RowFrom" 및 "@RowTo"는 종종 당황스러운 오류로 이어질 수 있습니다. "스칼라 변수를 선언해야 합니다."
이 문제는 쿼리를 컴파일하는 데 사용된 SQL 문자열(@sqlstatement) 내에서 매개 변수가 명시적으로 선언되지 않았기 때문에 발생합니다. 이를 수정하려면 다음 중 하나가 필요합니다.
CONVERT()를 활용하여 변수를 문자열로 변환:
int 유형 변수를 직접 연결하는 대신 CONVERT를 사용합니다. ()를 문자열로 변환합니다. 예를 들면 다음과 같습니다.
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
이렇게 하면 "@RowTo" 값을 "@Rt"에 문자열로 할당할 수 있습니다.
Modern CONCAT() 함수를 사용합니다.
최신 SQL 버전에서는 CONCAT() 함수가 매개변수 연결을 단순화하여 수동 변환.
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
보안 매개변수화 채택:
그러나 문자열 연결보다는 적절한 매개변수화를 선택하는 것이 좋습니다. 이 접근 방식은 사용자 입력 매개변수에서 SQL 코드를 분리하여 SQL 삽입 위험을 최소화합니다.
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
위 내용은 내 SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!