스칼라 변수를 선언해야 합니다.
@RowFrom int
@RowTo int
프로시저의 입력 이며, 내의 SQL 를 컴파일하고 있기 에 T-SQL을 사용합니다.Exec(@sqlstatement) 이 합니다.@RowFrom ★★★★★★★★★★★★★★★★★」@RowTo내 the의 @sqlstatement★★★★★★★★★★★★★。발발도도도도도도
"Must declare the scalar variable "@RowFrom"."
다음 , 음, 음, 음, 음, 음, 음, also, the, also, also, also, also, also, also, also, also, also, also, also, also에 넣어봤습니다.@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 주입에 노출될 수 있습니다(다음 참조).
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;
는, 변수가 「이러다」보다 됩니다.GO을 사용하다
참고로, 오래된 투고인 것은 알지만 데이터베이스 COLLATION 설정에 따라서는 다음과 같은 스테이트먼트에서 이 에러가 발생할 수 있습니다.
SET @sql = @Sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
예를 들어 S를 입력했을 경우
SET @sql = @***S***ql
여기에 게재되어 있는 답변에 대해 설명을 드리게 되어 죄송합니다만, 이것은 보고된 에러의 실제 예입니다.
또한 오류에 의해 메시지에 대문자인 S가 표시되지 않는 것에 주의해 주십시오.이유는 확실하지 않습니다만, 그 이유는 이 에러가
Set @sql =
등호 왼쪽에 있습니다.
변수 사용 후 'GO' 문장이 작성되어 있고 그 후에 사용하려고 하면 오류가 발생할 수 있습니다.'GO' 문이 있으면 삭제해 보십시오.
은 문제 가능성이 , 이 시 첫 .Sql declare scalar variable그래서 이 오류에 대한 가능한 해결책을 공유하고자 합니다.
내 경우 이 오류는 다음 사용으로 인해 발생했습니다.;SQL sql sql sql sql 。제거만 하면 오류가 사라집니다.
원인은 @IronSean이 위의 코멘트에 이미 게재한 것과 같다고 생각합니다.
GO(또는 이 경우 )를 사용하면 선언된 변수가 문 뒤에 표시되지 않는 새로운 분기가 발생한다는 점에 유의하십시오.
예를 들어 다음과 같습니다.
DECLARE @id int
SET @id = 78
SELECT * FROM MyTable WHERE Id = @var; <-- remove this character to avoid the error message
SELECT * FROM AnotherTable WHERE MyTableId = @var
이 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의 'Generate Script' 명령을 사용하여 데이터베이스 내용을 내보낸 후 생성된 데이터를 다른 인스턴스에 삽입하면서 몇 가지 작업을 수행하고 있습니다.
내보내기 생성으로 인해 sql 파일에 "GO" 문이 많이 있습니다.
파일 상단에 선언된 변수는 GO 문이 실행되는 한 액세스할 수 없다는 것을 몰랐습니다.따라서 SQL 파일에서 GO 문을 삭제해야 했고 "Must declar variable xy" 오류가 사라졌습니다.
https://learn.microsoft.com/en-us/sql/t-sql/language-elements/sql-server-utilities-statements-go?view=sql-server-ver16에서 설명한 바와 같이 사용자 정의 변수의 범위는 배치 의존적입니다.
--이것에 의해서 에러가 발생합니다.
GO
DECLARE @MyVariable int;
SET @MyVariable = 1;
GO --new batch of code
SELECT @MyVariable--CAST(@MyVariable AS
int);
GO
--이것은 에러를 발생시키지 않습니다.
GO
DECLARE @MyVariable int;
SET @MyVariable = 1;
SELECT @MyVariable--CAST(@MyVariable AS int);
GO
동적 SQL 내에 변수를 전달하려고 하면 다음과 같은 오류가 발생합니다.
GO
DECLARE @ColumnName VARCHAR(100),
@SQL NVARCHAR(MAX);
SET @ColumnName = 'FirstName';
EXECUTE ('SELECT [Title],@ColumnName FROM Person.Person');
GO
--위의 경우 @ColumnName을 찾을 수 없으므로 다음 중 하나를 수행합니다.
EXECUTE ('SELECT [Title],' +@ColumnName+ ' FROM Person.Person');
또는
GO
DECLARE @ColumnName VARCHAR(100),
@SQL NVARCHAR(MAX);
SET @ColumnName = 'FirstName';
SET @SQL = 'SELECT ' + @ColumnName + ' FROM Person.Person';
EXEC sys.sp_executesql @SQL
GO
종료문 뒤에 'GO'를 입력하고 모든 문을 선택한 후 실행합니다.
언급URL : https://stackoverflow.com/questions/7181976/must-declare-the-scalar-variable
'programing' 카테고리의 다른 글
| SQL: 레코드가 존재하는지 여부를 올바르게 확인하는 방법 (0) | 2023.04.19 |
|---|---|
| iPhone UIView z 인덱스를 설정하는 방법 (0) | 2023.04.19 |
| 캔버스를 변경합니다.코드에 있는 부동산을 남겨두고? (0) | 2023.04.19 |
| SQL Server의 DateTime 필드가 Excel에서 잘못 표시됨 (0) | 2023.04.19 |
| 지정된 시간 내 Cron 작업 및 랜덤 시간 (0) | 2023.04.19 |