@RowFrom int
@RowTo int
저장 프로 시저에 대한 전역 입력 매개 변수이며 T-SQL을 사용하여 저장 프로 시저 내에서 SQL 쿼리를 컴파일 한 다음 저장 프로 시저 Exec(@sqlstatement)
의 끝에서 사용 하여 결과를 표시하므로 사용하려고 할 때이 오류가 발생합니다. @RowFrom
또는 @RowTo
내에서 @sqlstatement
실행되는 변수 .. 그것은하시기 바랍니다 도움 .. 잘 달리 작동합니다.
"Must declare the scalar variable "@RowFrom"."
또한 @sqlstatement
변수에 다음을 포함 해 보았습니다 .
'Declare @Rt int'
'SET @Rt = ' + @RowTo
그러나 @RowTo
여전히 그 값을 전달하지 않고 @Rt
오류를 생성합니다.
답변
int를 문자열에 연결할 수 없습니다. 대신에:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
다음이 필요합니다.
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
여기서 무슨 일이 일어나고 있는지 설명하기 위해. @RowTo = 5라고합시다.
DECLARE @RowTo int;
SET @RowTo = 5;
DECLARE @sql nvarchar(max);
SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';
EXEC sys.sp_executesql @sql;
이를 문자열로 만들려면 (궁극적으로 숫자가 되더라도) 변환해야합니다. 그러나 보시다시피 숫자는 실행될 때 여전히 숫자로 취급됩니다. 답은 25입니다. 맞죠?
귀하의 경우에는 @sql 문자열 내에서 @Rt 등을 다시 선언 할 필요가 없으며 다음과 같이 말하면됩니다.
SET @sql = @sql + ' WHERE RowNum BETWEEN '
+ CONVERT(varchar(12), @RowFrom) + ' AND '
+ 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;
답변
답변
참고로, 이것이 오래된 게시물이라는 것을 알고 있지만 데이터베이스 COLLATION 설정에 따라 다음과 같은 명령문 에서이 오류가 발생할 수 있습니다.
SET @sql = @Sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
예를 들어 S를 입력하면
SET @sql = @***S***ql
이미 여기에 게시 된 답변을 분리해서 미안하지만 이것은보고 된 오류의 실제 인스턴스입니다.
또한 오류는 메시지에 대문자 S를 표시하지 않습니다. 이유는 잘 모르겠지만 그 이유는
Set @sql =
등호 왼쪽에 있습니다.
답변
이 MSDN 블로그에 따라 맞춤법 오류가 용의자 인 나를 위해 수정 된 것을 추가하십시오 …
여러 줄에 걸쳐 SQL 문자열을 분할 할 때 SQL 문자열을 매개 변수와 연결하지 않고 쉼표로 구분하고 각 분할 줄의 끝에 공백이 누락되지 않았는지 확인하십시오. 로켓 과학은 아니지만 내가 누군가의 두통을 구하기를 바랍니다.
예를 들면 :
db.TableName.SqlQuery(
"SELECT Id, Timestamp, User " +
"FROM dbo.TableName " +
"WHERE Timestamp >= @from " +
"AND Timestamp <= @till;" + [USE COMMA NOT CONCATENATE!]
new SqlParameter("from", from),
new SqlParameter("till", till)),
.ToListAsync()
.Result;
답변
대소 문자 구분도이 문제를 유발합니다.
@MyVariable 및 @myvariable은 SQL Server Man에서 동일한 변수입니다. 스튜디오와 작동합니다. 그러나 이러한 변수는 대 / 소문자 구분 차이로 인해 Visual Studio (C #)에서 “스칼라 변수”@MyVariable “을 선언해야합니다.”가됩니다.
답변
미래의 나를위한 대답입니다 (다른 사람에게도 도움이 될 것입니다!). 쿼리 편집기에서 다음과 같이 실행하려고하면 :
USE [Dbo]
GO
DECLARE @RC int
EXECUTE @RC = [dbo].[SomeStoredProcedure]
2018
,0
,'arg3'
GO
SELECT month, SUM(weight) AS weight, SUM(amount) AS amount
FROM SomeTable AS e
WHERE year = @year AND type = 'M'
그리고 오류가 발생합니다.
스칼라 변수 “@year”를 선언해야합니다.
저장 프로 시저 실행 과 그 아래에 쿼리 (!)를 모두 포함하는 코드를 실행하려고하기 때문 입니다. 실행하려는 항목을 강조 표시하거나 관심이없는 항목을 삭제 / 주석 처리하십시오.
답변
여기에 내 SQL 파일이 작동하지 않는 솔루션이없는 동안 다른 사람 이이 질문을 발견하면 내 실수는 다음과 같습니다.
Microsoft의 Server Management Studio의 ‘스크립트 생성’명령을 통해 내 데이터베이스의 콘텐츠를 내 보낸 다음 생성 된 데이터를 다른 인스턴스에 삽입하면서 나중에 몇 가지 작업을 수행했습니다.
생성 된 내보내기로 인해 SQL 파일에 “GO”문이 많이 있습니다.
내가 몰랐던 것은 파일 상단에 선언 된 변수는 GO 문이 실행되는 한 액세스 할 수 없다는 것입니다. 따라서 내 SQL 파일에서 GO 문을 제거 해야했고 “Must declare the scalar variable xy”오류가 사라졌습니다!