Heim >Datenbank >MySQL-Tutorial >Warum gibt meine gespeicherte SQL-Prozedur den Fehler „Muss die Skalarvariable deklarieren' aus?

Warum gibt meine gespeicherte SQL-Prozedur den Fehler „Muss die Skalarvariable deklarieren' aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 00:52:10964Durchsuche

Why Does My SQL Stored Procedure Throw a

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn