Heim >Datenbank >MySQL-Tutorial >Warum gibt meine gespeicherte SQL-Prozedur den Fehler „Muss die Skalarvariable deklarieren' aus?
Enthüllung des Geheimnisses „Muss die Skalarvariable deklarieren“
Im Bereich der gespeicherten SQL-Prozeduren wird versucht, globale Eingabeparameter wie zu verwenden „@RowFrom“ und „@RowTo“ in dynamisch generierten SQL-Anweisungen können oft zu dem verwirrenden Fehler „Must declare the“ führen Skalare Variable.“
Dieses Problem tritt auf, weil die Parameter nicht explizit in der SQL-Zeichenfolge (@sqlstatement) deklariert werden, die zum Kompilieren der Abfrage verwendet wird. Um dies zu beheben, ist Folgendes erforderlich:
Verwenden Sie CONVERT(), um Variablen in Zeichenfolgen zu konvertieren:
Anstatt eine Variable vom Typ int direkt zu verketten, verwenden Sie CONVERT (), um es in einen String umzuwandeln. Zum Beispiel:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Dadurch wird sichergestellt, dass der Wert von „@RowTo“ „@Rt“ als Zeichenfolge zugewiesen werden kann.
Verwenden Sie die moderne CONCAT()-Funktion:
In neueren SQL-Versionen vereinfacht die Funktion CONCAT() die Parameterverkettung, sodass keine manuelle Eingabe erforderlich ist Konvertierung.
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
Sichere Parametrisierung übernehmen:
Es wird jedoch dringend empfohlen, sich für eine ordnungsgemäße Parametrisierung anstelle einer Zeichenfolgenverkettung zu entscheiden. Dieser Ansatz minimiert das Risiko einer SQL-Injection, indem SQL-Code von Benutzereingabeparametern getrennt wird.
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
Das obige ist der detaillierte Inhalt vonWarum gibt meine gespeicherte SQL-Prozedur den Fehler „Muss die Skalarvariable deklarieren' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!