ProgramingTip

스칼라 변수를 선언해야합니다.

bestdevel 2020. 11. 2. 08:10
반응형

스칼라 변수를 선언해야합니다.


@RowFrom int

@RowTo int

T-SQL을 사용하여 저장 프로 시저에 대한 전역 입력 매개 변수이며 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 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 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;

변수가 이전에 선언 GO되고 이후에 참조 될 경우 에도이 오류 메시지를받을 수 있습니다 .

질문 과이 해결 방법을 참조하십시오 .


대소 문자 구분 도이 문제를 유발합니다.

@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"를 선언해야합니다.

저장 프로 시저 실행 그 아래에 쿼리 (!)를 모두 포함하는 코드를 실행하려고하기 때문 입니다. 실행하려는 항목을 강조 표시하거나 관심이없는 항목을 삭제 / 주석 처리하십시오.

참고 URL : https://stackoverflow.com/questions/7181976/must-declare-the-scalar-variable

반응형