Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Creazione di una clausola where dinamica nella stored procedure di SQL Server

Almeno un problema:dovresti circondare il valore della tua stringa con virgolette singole e per sfuggire a quelle all'interno di una stringa devi raddoppiarle:

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

Potresti anche voler dichiarare la tua variabile @sql come qualcosa di più grande di 100 caratteri! Sembra che la tua stringa venga troncata.

Se i possibili valori per @pi_colName sono finiti, il tipo di dati è sempre stringa e le colonne sono compatibili con le regole di confronto, puoi fare qualcosa del genere ed evitare SQL dinamico:

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