집 >데이터 베이스 >MySQL 튜토리얼 >내 T-SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?
스칼라 변수 선언 필수: 오류 해결
T-SQL을 사용하여 저장 프로시저 내에서 SQL 쿼리를 실행할 때 일반적으로 발생하는 문제는 다음과 같습니다. @RowFrom 및 @RowTo와 같은 전역 입력 매개변수를 사용할 때 "스칼라 변수를 선언해야 합니다" 오류가 발생합니다. 이 문제는 프로시저가 @sqlstatement 변수 내에서 이러한 매개 변수를 활용하려고 시도할 때 발생합니다.
오류 이해
T-SQL이 모든 스칼라 변수를 예상하기 때문에 오류가 발생합니다. 입력 매개변수로 정의된 매개변수를 포함하여 사용하기 전에 명시적으로 선언해야 합니다. 해당 시나리오에서는 @RowFrom 및 @RowTo가 @sqlstatement 변수 내에서 선언되지 않아 오류가 발생합니다.
해결책: 매개 변수 선언
이 오류를 해결하려면 , @sqlstatement 변수 내에서 스칼라 변수를 선언해야 합니다. 이는 아래 수정된 코드와 같이 DECLARE 문을 사용하여 달성할 수 있습니다.
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
이 코드에서는 스칼라 변수 @Rt를 선언하고 이를 다음으로 변환한 후 @RowTo 값을 할당합니다. CONVERT 함수를 사용한 문자열입니다. 이렇게 하면 @Rt가 올바르게 선언되고 @sqlstatement 변수 내에서 사용될 수 있습니다.
연결 대 매개변수화
연결을 사용하여 SQL 문자열을 작성할 수 있습니다. , 일반적으로 보안상의 이유로 매개변수화를 사용하는 것이 좋습니다. 매개변수를 사용하여 SQL 주입 공격의 위험을 최소화합니다. 아래 수정된 코드는 매개변수화를 사용할 수 있는 방법을 보여줍니다.
SET @sql = N'SELECT @RowFrom, @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
매개변수화를 사용하면 @RowFrom 및 @RowTo 값을 SQL 문에 연결하지 않고 저장 프로시저에 제공하여 보안을 보장합니다. 우리의 코드입니다.
위 내용은 내 T-SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!