MSSQLSERVER_137
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Сведения
Атрибут | Значение |
---|---|
Название продукта | SQL Server |
ИД события | 137 |
Источник событий | MSSQLSERVER |
Компонент | SQLEngine |
Символическое имя | P_SCALAR_VAR_NOTFOUND |
Текст сообщения | Должна быть объявлена скалярная переменная «%.*ls». |
Описание
Эта ошибка происходит, если переменная используется в скрипте SQL без предварительного объявления этой переменной. В следующем примере возвращается ошибка 137 для инструкций SET и SELECT, так как @mycol не объявлены.
SET @mycol = 'ContactName';
SELECT @mycol;
Одной из трудноуловимых причин этой ошибки является использование переменной, которая объявлена вне инструкции EXECUTE. Например, переменная @mycol , указанная в инструкции SELECT, является локальной для инструкции SELECT, поэтому она находится за пределами инструкции EXECUTE.
USE AdventureWorks2022;
GO
DECLARE @mycol nvarchar(20);
SET @mycol = 'Name';
EXECUTE ('SELECT @mycol FROM Production.Product;');
Действие пользователя
Убедитесь в том, что все переменные, используемые в скрипте SQL, объявляются перед их применением в любом месте скрипта.
Перепишите скрипт так, чтобы в инструкции EXECUTE не применялись ссылки на переменные, которые объявлены вне этой инструкции. Например:
USE AdventureWorks2022;
GO
DECLARE @mycol nvarchar(20) ;
SET @mycol = 'Name';
EXECUTE ('SELECT ' + @mycol + ' FROM Production.Product;') ;
См. также
EXECUTE (Transact-SQL)
Инструкции SET (Transact-SQL)
DECLARE @local_variable (Transact-SQL)