복붙노트

[SQL] 스칼라 변수를 선언해야합니다

SQL

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

@RowFrom INT

INT @RowTo

저장 프로 시저 모두 글로벌 입력에 Params이 있고, 나는 결과를 보여주기 위해 저장 프로 시저의 끝에서 Exec을 (@sqlstatement)를 사용하여 다음 T-SQL과 저장 프로 시저 내부의 SQL 쿼리를 컴파일하고 있기 때문에, 그것은 나에게 오류를 제공합니다 나는 실행되는 @sqlstatement 변수 내부 @RowFrom 또는 @RowTo를 사용하려고하면 ... 그것은하시기 바랍니다 도움 .. 잘 달리 작동합니다.

"Must declare the scalar variable "@RowFrom"."

또한, 나는 @sqlstatement 변수에 다음과 같은 시도 :

'Declare @Rt int'
'SET @Rt = ' + @RowTo

하지만 @RowTo 여전히 @Rt에 그 값을 전달하고 오류가 발생하지 않습니다.

해결법

  1. ==============================

    1.당신은 문자열로 int를 연결할 수 없습니다. 대신에:

    당신은 문자열로 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;
    
  2. ==============================

    2.그냥 참고로, 나는 이것이 이전 게시물입니다 알지만, 데이터베이스 데이터 정렬 설정에 따라이 같은 성명에이 오류를 얻을 수 있습니다,

    그냥 참고로, 나는 이것이 이전 게시물입니다 알지만, 데이터베이스 데이터 정렬 설정에 따라이 같은 성명에이 오류를 얻을 수 있습니다,

    SET @sql = @Sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
    

    예를 들어, 당신은에 S를 오타 경우

    SET @sql = @***S***ql 
    

    죄송합니다 답변 이미 여기에 게시하지만,이보고 오류의 실제 인스턴스 분사합니다.

    오류가 나는 확실히 왜 안 나는, 메시지의 자본 S를 표시하지 않을 수도 있습니다,하지만 난 그것이 때문에 생각

    Set @sql =
    

    등호의 왼쪽에 있습니다.

  3. ==============================

    3.글 랜드가 이후에 참조하기 전에 변수가 선언 된 경우이 오류 메시지를 얻을 수 있습니다.

    글 랜드가 이후에 참조하기 전에 변수가 선언 된 경우이 오류 메시지를 얻을 수 있습니다.

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

  4. ==============================

    4.맞춤법이 잘못이 MSDN 블로그에 따라 용의자입니다 그냥 나를 위해 그것을 고정 무엇을 추가 ...

    맞춤법이 잘못이 MSDN 블로그에 따라 용의자입니다 그냥 나를 위해 그것을 고정 무엇을 추가 ...

    여러 줄에 걸쳐 분할 SQL 문자열, 당신은 당신의 매개 변수에서 SQL 문자열을 분리하는 쉼표 있다는 것을 확인하는 경우 (와!을 연결하는 시도하지 않음) 및 각 분할 라인의 끝에 공백 누락하지. 누군가 두통 저장 I 희망하지 로켓 과학을하지만.

    예를 들면 :

    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;
    
  5. ==============================

    5.대소 문자 구분도이 문제가 발생합니다.

    대소 문자 구분도이 문제가 발생합니다.

    @MyVariable 및 @myvariable는 SQL 서버 남자 같은 변수입니다. Studio와 의지 작동합니다. 그러나, 이들 변수를 초래하는 경우 의한 감도 차이 비주얼 스튜디오 (C 번호)에 @MyVariable ''스칼라 변수를 선언해야한다 ".

  6. ==============================

    6.미래의 나를 위해 그냥 대답 (어쩌면 너무 다른 사람이 도움이!). 당신은 쿼리 편집기에서 이런 식으로 뭔가를 실행하려고하면 :

    미래의 나를 위해 그냥 대답 (어쩌면 너무 다른 사람이 도움이!). 당신은 쿼리 편집기에서 이런 식으로 뭔가를 실행하려고하면 :

    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'
    

    그리고 당신은 오류가 발생합니다 :

    의 당신은 저장 프로 시저를 실행하고 아래에있는 쿼리가 모두 포함 코드의 무리를 실행하려고하기 때문 (!). 그냥 당신이 / 당신이에 관심이없는 사람 밖으로 코멘트를 실행하거나 삭제하려는 하나를 선택.

  7. from https://stackoverflow.com/questions/7181976/must-declare-the-scalar-variable by cc-by-sa and MIT license