MSSQLSERVER_137MSSQLSERVER_137

DettagliDetails

Nome prodottoProduct Name SQL ServerSQL Server
ID eventoEvent ID 137137
Origine eventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbolicoSymbolic Name P_SCALAR_VAR_NOTFOUNDP_SCALAR_VAR_NOTFOUND
Testo del messaggioMessage Text Dichiarare la variabile scalare "%.ls".Must declare the scalar variable "%.ls".

SpiegazioneExplanation

Questo errore si verifica quando una variabile viene utilizzata in uno script SQL senza essere stata dichiarata in precedenza.This error occurs when a variable is used in a SQL script without first declaring the variable. Nell'esempio seguente viene restituito l'errore 137 per entrambe le istruzioni SET e SELECT poiché non è stata dichiarata la variabile @mycol.The following example returns error 137 for both the SET and SELECT statements because @mycol is not declared.

SET @mycol = 'ContactName';SET @mycol = 'ContactName';

SELECT @mycol;SELECT @mycol;

Una delle cause più complesse di questo errore include l'utilizzo di una variabile dichiarata al di fuori dell'istruzione EXECUTE.One of the more complicated causes of this error includes the use of a variable that is declared outside the EXECUTE statement. La variabile @mycol specificata nell'istruzione SELECT, ad esempio, è locale per l'istruzione SELECT, ma è esterna all'istruzione EXECUTE.For example, the variable @mycol specified in the SELECT statement is local to the SELECT statement; thus it is outside the EXECUTE statement.

USE AdventureWorks2012;USE AdventureWorks2012;

GOGO

DECLARE @mycol nvarchar(20);DECLARE @mycol nvarchar(20);

SET @mycol = 'Name';SET @mycol = 'Name';

EXECUTE ('SELECT @mycol FROM Production.Product;');EXECUTE ('SELECT @mycol FROM Production.Product;');

Azione dell'utenteUser Action

Verificare che qualsiasi variabile utilizzata in uno script SQL venga dichiarata prima di essere utilizzata.Verify that any variables used in a SQL script are declared before being used elsewhere in the script.

Riscrivere lo script in modo che non faccia riferimento a variabili nell'istruzione EXECUTE dichiarate al di fuori dell'istruzione stessa.Rewrite the script so that it does not reference variables in the EXECUTE statement that are declared outside of it. Esempio:For example:

USE AdventureWorks2012;USE AdventureWorks2012;

GOGO

DECLARE @mycol nvarchar(20) ;DECLARE @mycol nvarchar(20) ;

SET @mycol = 'Name';SET @mycol = 'Name';

EXECUTE ('SELECT ' + @mycol + ' FROM Production.Product';) ;EXECUTE ('SELECT ' + @mycol + ' FROM Production.Product';) ;

Vedere ancheSee Also

EXECUTE (Transact-SQL)EXECUTE (Transact-SQL)
Istruzioni SET (Transact-SQL)SET Statements (Transact-SQL)
DECLARE @local_variable (Transact-SQL)DECLARE @local_variable (Transact-SQL)