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

내 T-SQL 저장 프로시저에서 '스칼라 변수를 선언해야 합니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

DDD
DDD원래의
2024-12-24 04:13:23401검색

Why Does My T-SQL Stored Procedure Throw a

스칼라 변수 선언 필수: 오류 해결

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

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