>데이터 베이스 >MySQL 튜토리얼 >내 SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇입니까?

내 SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-23 00:52:101006검색

Why Does My SQL Stored Procedure Throw a

"스칼라 변수를 선언해야 한다"의 비밀

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.