sql >> Databáze >  >> RDS >> Sqlserver

Vytvoření dynamické klauzule where v uložené proceduře serveru SQL Server

Alespoň jeden problém:hodnotu řetězce byste měli obklopovat jednoduchými uvozovkami, a chcete-li uniknout těm v řetězci, musíte je zdvojnásobit:

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

Můžete také chtít deklarovat svou proměnnou @sql jako něco většího než 100 znaků! Zdá se, že váš řetězec se ořezává.

Pokud jsou možné hodnoty pro @pi_colName konečné, datový typ je vždy řetězec a sloupce jsou kompatibilní s řazením, můžete udělat něco takového a vyhnout se dynamickému SQL:

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



  1. Použití DISTINCT a COUNT společně v dotazu MySQL

  2. Jak mohu připojit řetězec k existujícímu poli v MySQL?

  3. Záznam klonu SQL s jedinečným indexem

  4. MariaDB JSON_REMOVE() Vysvětleno