sql >> Base de Datos >  >> RDS >> Sqlserver

Creación de una cláusula where dinámica en el procedimiento almacenado de SQL Server

Al menos un problema:debe rodear el valor de su cadena con comillas simples, y para escapar de las que están dentro de una cadena, debe duplicarlas:

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

¡También puede declarar su variable @sql como algo más grande que 100 caracteres! Parece que tu cadena se está truncando.

Si los valores posibles para @pi_colName son finitos, el tipo de datos siempre es una cadena y las columnas son compatibles con la intercalación, podría hacer algo como esto y evitar el SQL dinámico:

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