Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Сведения
| Атрибут | Значение |
|---|---|
| Название продукта | 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)