Как правильно экранировать двоеточие в SQL-запросе QueryExecute? - PullRequest
0 голосов
/ 14 ноября 2018

Обновление: не удовлетворен этим ответом, но я обнаружил, что если не передать структуру param, CF2016 будет игнорировать двоеточия Похоже, что CF2018 не имеет проблемы в любом случае (хотя я могу проверить это только с запросом на данный момент).

Мы создали sql запросы, которые не используют параметры запроса, проходящие через QueryExecute(). Иногда я вижу ошибку Пробел не допускается после префикса параметра ':' и обнаруживается, что он вызван строковым литералом с двоеточием и пробелом. Например:

select 'test this: error'

Мне не удалось найти официальный способ избежать толстой кишки, и обычные побеги не сработали, но я нашел этот обходной путь ...

sqlstring = replace(sqlstring, ": ", ":'+' ", "all")

Однако это не учитывает другие ситуации, которые могут возникнуть, которые не будут строковым литералом, таким как имя столбца с двоеточием и пробелом, и, вероятно, многие другие, о которых я не могу думать в данный момент.

Есть ли официальный способ избежать двоеточия, переданного в QueryExecute, не являющегося частью queryparam?

1 Ответ

0 голосов
/ 15 ноября 2018

Полагаю, вы могли бы отделить строку и передать ее в

result = QueryExecute("
  SELECT :mystring AS ...
  ",
  { mystring : "test this: error"}
  );

Похоже, много работы.

...