MSSQLSERVER_137
Details
Produktname |
SQL Server |
Produktversion |
10.50 |
Buildnummer des Produkts |
|
Ereignis-ID |
137 |
Ereignisquelle |
MSSQLSERVER |
Komponente |
SQLEngine |
Symbolischer Name |
P_SCALAR_VAR_NOTFOUND |
Meldungstext |
Die "%.*ls"-Skalarvariable muss deklariert werden. |
Erklärung
Dieser Fehler tritt auf, wenn in einem SQL-Skript eine Variable verwendet wird, ohne dass die Variable zuerst deklariert wurde. Im folgenden Beispiel wird beispielsweise Fehler 137 für die SET- und die SELECT-Anweisung zurückgegeben, weil @mycol nicht deklariert wurde.
SET @mycol = 'ContactName';
SELECT @mycol;
Eine der etwas komplizierteren Ursachen für diesen Fehler ist u. a. die Verwendung einer Variablen, die außerhalb der EXECUTE-Anweisung deklariert wurde. Angenommen, die in der SELECT-Anweisung angegebene Variable @mycol ist für die SELECT-Anweisung lokal. Das bedeutet, dass sie sich außerhalb der EXECUTE-Anweisung befindet.
USE AdventureWorks2008R2;
GO
DECLARE @mycol nvarchar(20);
SET @mycol = 'Name';
EXECUTE ('SELECT @mycol FROM Production.Product;');
Benutzeraktion
Überprüfen Sie, ob alle in einem SQL-Skript verwendeten Variablen deklariert wurden, bevor sie an anderer Stelle im Skript verwendet werden.
Schreiben Sie das Skript um, sodass es nicht auf Variablen in der EXECUTE-Anweisung verweist, die außerhalb davon deklariert wurden. Beispiel:
USE AdventureWorks2008R2;
GO
DECLARE @mycol nvarchar(20);
SET @mycol = 'Name';
EXECUTE ('SELECT ' + @mycol + ' FROM Production.Product';);