OK, quindi devo questa riga di codice in una ricerca stored procedure:Un modo più elegante di sfuggire all'SQL dinamico?
SET @where = 'job_code = ''' + REPLACE(@job_code, '''', '''''') + ''''
e ci sono fondamentalmente due operazioni che vorrei semplificare - il primo essere che circonda il valore concatenato tra apici . Ovviamente, nella dichiarazione di cui sopra, sto sfuggire un '
usando due ''
e poi terminare la stringa con un '
così posso concatenare il valore effettivo. Deve esserci un modo migliore!
Il secondo delle operazioni sarebbe il REPLACE(@job_code, '''', '''''')
in cui sono in grado di sfuggire le singole virgolette che potrebbero esistere nel campo.
Non c'è un modo molto più elegante di scrivere questa riga di codice nel suo complesso?
Ho pensato che fosse la parola chiave ESCAPE
ma che è strettamente legata alla dichiarazione LIKE
, quindi non andare lì.
Avete considerato di passare direttamente come variabile al vostro SQL dinamico invece di concatenarlo? So che andare con il valore di hardcoded è migliore per evitare problemi di snifing dei parametri, ma a seconda del carico di lavoro questa potrebbe essere un'opzione più semplice. –
@ Love2Learn, non è qualcosa che ho considerato, ma dopo averci pensato sono abbastanza sicuro di volerne evitare perché voglio mantenere la procedura memorizzata in modo che possa essere utilizzata da qualsiasi utente. Aggiungere quel tipo di ipotesi renderebbe più difficile mantenerlo consumabile. –
L'uso di una variabile per '' lo renderà leggermente più leggibile, ma non è un miglioramento enorme. –