Heim > Datenbank > MySQL-Tutorial > Wie gehe ich mit globalen Eingabeparametern in gespeicherten T-SQL-Prozeduren um, wenn dynamisches SQL ausgeführt wird?

Wie gehe ich mit globalen Eingabeparametern in gespeicherten T-SQL-Prozeduren um, wenn dynamisches SQL ausgeführt wird?

DDD
Freigeben: 2024-12-15 00:07:13
Original
762 Leute haben es durchsucht

How to Handle Global Input Parameters in T-SQL Stored Procedures When Executing Dynamic SQL?

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 :

  1. Int in String konvertieren: Um den ganzzahligen Wert von @RowTo als zu übergeben Verwenden Sie für eine Zeichenfolge die CONVERT-Funktion:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Nach dem Login kopieren
  1. Verwenden Sie die richtige Parametrisierung: Anstatt Werte in der SQL-Zeichenfolge zu verketten, verwenden Sie parametrisierte Abfragen, um Eingabeparameter sicher zu übergeben. Zum Beispiel:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';

EXEC sys.sp_executesql @sql,
  N'@RowFrom int, @RowTo int',
  @RowFrom, @RowTo;
Nach dem Login kopieren

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');
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage