Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen einer dynamischen Where-Klausel in einer gespeicherten SQL Server-Prozedur

Mindestens ein Problem:Sie sollten Ihren String-Wert in einfache Anführungszeichen setzen, und um diese innerhalb eines Strings zu maskieren, müssen Sie sie verdoppeln:

WHERE ' + @pi_colName + ' = ''' + @pi_colValue + ''' AND ...

Vielleicht möchten Sie Ihre @sql-Variable auch mit etwas mehr als 100 Zeichen deklarieren! Sieht so aus, als ob Ihre Zeichenfolge abgeschnitten wird.

Wenn die möglichen Werte für @pi_colName endlich sind, der Datentyp immer ein String ist und die Spalten kollationskompatibel sind, könnten Sie so etwas tun und dynamisches SQL vermeiden:

SELECT ...
WHERE CASE @pi_colName 
  WHEN 'col1' THEN col1
  WHEN 'col2' THEN col2
END = @pi_ColValue;