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