Поделиться через


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)