QueryExecute(): как использовать поиск по подстановочным знакам SQL с предложением LIKE?

Я новичок в ColdFusion и пытаюсь что-то запросить и использовать в cfscript. Я не могу использовать здесь реальный код, но вот общий SQL-запрос, который, я надеюсь, поможет. Это старый скрипт, и я пытаюсь изменить его с тегов cfquery на теги cfscript.

<cfscript>
    sqlCF = queryExecute("SELECT primarykey FROM names, personnel  
                          WHERE name.primaykey = personnel.primarykey 
                          AND ( upper(personnel.ID LIKE upper(':id%') OR 
                                upper(personnel.userID) LIKE upper(':id%')
                              )
                        , {id={value = "xyz123", cfsqltype="cf_sql_varchar}}
                        , {datasource=person"}); 

writeDump(sqlCF);
</cfscript>

Когда я запускаю его, он отображается как 0 запросов, но когда я жестко кодирую его и меняю часть :id% запроса на xyz123% в качестве значения, оно работает. Я просто не знаю, как следует передавать LIKE('XXXX%') со знаком подстановки или выглядит ли это правильно. Любые идеи?


person JNetputne    schedule 24.07.2018    source источник
comment
Ничего общего с вопросом, но если вы обновляете старый код, вы также можете перейти на более новый синтаксис JOIN ANSI-99.   -  person SOS    schedule 24.07.2018


Ответы (1)


Вы хотите добавить подстановочный знак к строке в вашем параметре, а не внутри строки запроса. Также обратите внимание, когда я использовал параметры, я не заключал их в кавычки.

<cfscript>
    sqlCF = queryExecute("
        select primarykey
        from names, personnel
        where name.primaykey = personnel.primarykey
        and (
            upper(personnel.ID) LIKE upper(:id)
            or 
            upper(personnel.userID) LIKE upper(:id)
        )
    ",{
        id={
            value = "xyz123%",
            cfsqltype="cf_sql_varchar"
        }
    },
    {datasource="person"});
</cfscript>
person Twillen    schedule 24.07.2018
comment
Чёрт, побей меня! Также имя источника данных должно быть заключено в кавычки: datasource="person". - person SOS; 24.07.2018
comment
Истинно, если это строка, а не переменная. Было довольно много синтаксических проблем с опубликованным примером в отношении того, были ли кавычки запущены и остановлены, поэтому мне пришлось угадывать, что следует/не следует цитировать. - person Twillen; 24.07.2018
comment
Ага. Я знаю только потому, что тестировал его с другим запросом, и CF пожаловался на отсутствие кавычек. - person SOS; 24.07.2018
comment
Я не фанат этого, но приложения, которые я поддерживаю, завалены datasource=session.dsn; поэтому мой разум выбрал без кавычек. Я согласен, что цитаты выглядят лучше здесь. - person Twillen; 24.07.2018
comment
О, я понимаю, что вы имеете в виду. Это работает, потому что это переменная. (В случае OP этого не происходит, потому что имя является строковым литералом, поэтому CF ищет переменную с именем person и выдает ошибки, когда не находит ее). - person SOS; 24.07.2018
comment
Спасибо ребята!. Вы, ребята, помогли мне! Я совершенно не думал о том, чтобы поставить подстановочный знак в параметр. Я должен был мыслить нестандартно и изменить запрос. - person JNetputne; 26.07.2018