Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Szczegóły
| Attribute | Wartość |
|---|---|
| Nazwa produktu | SQL Server |
| Identyfikator zdarzenia | 137 |
| Źródło zdarzenia | MSSQLSERVER |
| Składnik | SQLEngine |
| Nazwa symboliczna | P_SCALAR_VAR_NOTFOUND |
| Tekst wiadomości | Należy zadeklarować zmienną skalarną "%.*ls". |
Explanation
Błąd ten występuje, gdy zmienna jest używana w skrypcie SQL bez wcześniejszego zadeklarowania tej zmiennej. Poniższy przykład zwraca błąd 137 zarówno dla instrukcji SET, jak i SELECT, ponieważ @mycol nie jest deklarowany.
SET @mycol = 'ContactName';
SELECT @mycol;
Jedną z bardziej skomplikowanych przyczyn tego błędu jest użycie zmiennej zadeklarowanej poza poleceniem EXEKUTE. Na przykład zmienna @mycol określona w instrukcji SELECT jest lokalna względem instrukcji SELECT; dlatego znajduje się poza poleceniem EXEKUTE.
USE AdventureWorks2022;
GO
DECLARE @mycol nvarchar(20);
SET @mycol = 'Name';
EXECUTE ('SELECT @mycol FROM Production.Product;');
Akcja użytkownika
Sprawdź, czy wszelkie zmienne używane w skrypcie SQL są zadeklarowane przed użyciem w innym miejscu skryptu.
Przekształc skrypt tak, aby nie odwoływał się do zmiennych w instrukcji EXECUTE zadeklarowanych poza nim. Przykład:
USE AdventureWorks2022;
GO
DECLARE @mycol nvarchar(20) ;
SET @mycol = 'Name';
EXECUTE ('SELECT ' + @mycol + ' FROM Production.Product;') ;
Zobacz też
WYKONAJ (Transact-SQL)
INSTRUKCJE SET (Transact-SQL)
DECLARE @local_variable (Transact-SQL)