Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Tworzenie dynamicznej klauzuli where w procedurze składowanej SQL Server

Przynajmniej jeden problem:powinieneś otoczyć swoją wartość ciągu pojedynczymi cudzysłowami, a aby uciec od tych wewnątrz ciągu, musisz je podwoić:

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

Możesz również zadeklarować swoją zmienną @sql jako coś większego niż 100 znaków! Wygląda na to, że Twój ciąg jest obcinany.

Jeśli możliwe wartości @pi_colName są skończone, typ danych to zawsze łańcuch, a kolumny są zgodne z sortowaniem, możesz zrobić coś takiego i uniknąć dynamicznego SQL:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. przechowywanie haseł w SQL Server

  2. Kopia zapasowa na poziomie tabeli

  3. Używasz parametrów opcjonalnych, gdy wartość przychodząca ma wartość null?

  4. Użyj zmiennej z TOP w instrukcji select w SQL Server bez robienia jej dynamicznej

  5. SQL Server Error 111:„… musi być pierwszą instrukcją w partii kwerendy”