전역 입력 매개 변수 및 SQL 실행 문제
T-SQL로 SQL 쿼리를 컴파일하고 EXEC를 사용하여 실행하는 저장 프로시저에서 (@sqlstatement), "스칼라 변수 "@RowFrom"을 선언해야 합니다."라는 오류가 발생할 수 있습니다. @sqlstatement 변수 내에서 전역 입력 매개변수 @RowFrom 및 @RowTo를 사용하려고 할 때.
문제 이해
@RowFrom 및 @RowTo 매개변수 때문에 오류가 발생합니다. @sqlstatement 문자열 내에서는 인식되지 않습니다. 이는 SQL 문자열이 명시적인 선언 없이는 전역 변수에 직접 액세스할 수 없기 때문입니다.
해결책: Int를 문자열로 변환하거나 적절한 매개 변수화 사용
이 문제를 해결하려면 두 가지 접근 방식이 있습니다. :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
최신 버전에 대한 고려 사항
최신 버전의 SQL에서는 문자열 연결에 CONCAT 함수를 사용할 수 있습니다.
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
단, SQL 주입을 방지하려면 적절한 매개변수화를 사용하는 것이 좋습니다. 취약점.
위 내용은 동적 SQL을 실행할 때 T-SQL 저장 프로시저에서 전역 입력 매개 변수를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!