Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLDatabáze SQL v Microsoft Fabric
Podrobnosti
| Vlastnost | Hodnota |
|---|---|
| Název produktu | SQL Server |
| ID události | 137 |
| Zdroj událostí | MSSQLSERVER |
| Součást | SQLEngine |
| Symbolický název | P_SCALAR_VAR_NOTFOUND |
| Text zprávy | Musí deklarovat skalární proměnnou "%.*ls". |
Explanation
Tato chyba nastává, když je proměnná použita v SQL skriptu bez předchozího deklarování proměnné. Následující příklad vrací chybu 137 jak pro příkazy SET, tak SELECT, protože @mycol není deklarován.
SET @mycol = 'ContactName';
SELECT @mycol;
Jednou z komplikovanějších příčin této chyby je použití proměnné, která je deklarována mimo příkaz EXEKUTE. Například proměnná @mycol specifikovaná v příkazu SELECT je lokální vůči příkazu SELECT; tedy je mimo příkaz EXEKUTE.
USE AdventureWorks2022;
GO
DECLARE @mycol nvarchar(20);
SET @mycol = 'Name';
EXECUTE ('SELECT @mycol FROM Production.Product;');
Uživatelská akce
Ověřte, že všechny proměnné použité v SQL skriptu jsou deklarovány před použitím jinde ve skriptu.
Přepište skript tak, aby neodkazoval na proměnné v příkazu EXECUT, které jsou deklarovány mimo něj. Například:
USE AdventureWorks2022;
GO
DECLARE @mycol nvarchar(20) ;
SET @mycol = 'Name';
EXECUTE ('SELECT ' + @mycol + ' FROM Production.Product;') ;
Viz také
EXECUTE (Transact-SQL)
Příkazy SET (Transact-SQL)
DECLARE @local_variable (Transact-SQL)