sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en dynamisk where-sats i SQL Server-lagrad procedur

Åtminstone ett problem:du bör omge ditt strängvärde med enstaka citattecken, och för att undvika dem i en sträng måste du dubbla dem:

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

Du kanske också vill deklarera din @sql-variabel som något större än 100 tecken! Det verkar som att din sträng blir trunkerad.

Om de möjliga värdena för @pi_colName är ändliga, datatypen alltid är sträng och kolumnerna är sorteringskompatibla, kan du göra något så här och undvika dynamisk SQL:

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



  1. Hur man förhindrar SQL-injektionsattacker med Secure

  2. Utför omedelbart inom Oracle Procedur

  3. Problem med SQLiteOpenHelper på Android 2.X och 3.X

  4. Värden tillåter inte evenemang på MySQL, vilket är det bästa alternativet