Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Création d'une clause where dynamique dans une procédure stockée SQL Server

Au moins un problème :vous devez entourer votre valeur de chaîne de guillemets simples, et pour échapper ceux à l'intérieur d'une chaîne, vous devez les doubler :

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

Vous pouvez également déclarer votre variable @sql comme quelque chose de plus de 100 caractères ! Il semble que votre chaîne soit tronquée.

Si les valeurs possibles pour @pi_colName sont finies, que le type de données est toujours une chaîne et que les colonnes sont compatibles avec le classement, vous pouvez faire quelque chose comme ceci et éviter le SQL dynamique :

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