如何在Stata的SQL注入语句中正确匹配字符串?
在Stata的ODBC SQL语句中处理字符串比较的问题
你的问题根源在于引号嵌套冲突:当SQL语句里包含字符串单引号时,外层的引号嵌套逻辑被打乱,导致Stata无法正确解析exec()中的完整SQL语句,从而触发r(198)错误。整数条件能正常运行,是因为整数无需引号,不会引发嵌套冲突。
解决这个问题有几种可靠的方法:
方法1:转义SQL中的单引号
在SQL的字符串单引号前再加一个单引号(即使用两个连续单引号),让Stata把它解析为一个实际的单引号传递给ODBC:
odbc load, exec('"select * from table_name as u, l2010 as lv where u.IntUft=''I''"') dsn("some_db") clear
方法2:调整引号嵌套顺序
把外层的单引号和内层的双引号互换,避免SQL中的单引号与外层引号冲突:
odbc load, exec("'select * from table_name as u, l2010 as lv where u.IntUft='I''") dsn("some_db") clear
方法3:使用Stata宏拼接SQL语句
先将SQL语句定义为宏,再通过宏引用传递给exec(),这种方式更清晰,也便于维护复杂SQL:
local sql_query "select * from table_name as u, l2010 as lv where u.IntUft='I'" odbc load, exec(`"`sql_query'"') dsn("some_db") clear
以上三种方法都能让Stata正确识别包含字符串比较的SQL语句,避免引号解析错误。
内容的提问来源于stack exchange,提问作者Praanto
相关产品推荐
相关产品推荐

