Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit globalen Eingabeparametern in gespeicherten T-SQL-Prozeduren um, wenn dynamisches SQL ausgeführt wird?
Probleme mit globalen Eingabeparametern und SQL-Ausführung
In einer gespeicherten Prozedur, die eine SQL-Abfrage mit T-SQL kompiliert und mit EXEC ausführt (@sqlstatement) erhalten Sie möglicherweise einen Fehler mit der Meldung „Die Skalarvariable „@RowFrom“ muss deklariert werden.“ beim Versuch, die globalen Eingabeparameter @RowFrom und @RowTo innerhalb der @sqlstatement-Variablen zu verwenden.
Verstehen des Problems
Der Fehler tritt auf, weil die Parameter @RowFrom und @RowTo werden in der @sqlstatement-Zeichenfolge nicht erkannt. Dies liegt daran, dass SQL-Strings ohne explizite Deklaration nicht direkt auf globale Variablen zugreifen können.
Lösung: Int in String konvertieren oder die richtige Parametrisierung verwenden
Es gibt zwei Ansätze, um dieses Problem zu lösen :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
Berücksichtigung moderner Versionen
In modernen Versionen von SQL können Sie die CONCAT-Funktion zur Zeichenfolgenverkettung verwenden:
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
Es wird jedoch empfohlen, die richtige Parametrisierung zu verwenden, um SQL-Injection-Schwachstellen zu verhindern.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit globalen Eingabeparametern in gespeicherten T-SQL-Prozeduren um, wenn dynamisches SQL ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!