使用RODBCext(和Teradata)我的SQL查询通常需要加以限制,并使用where
语句完成。但是,这并不总是必需的,不限制是有益的,但我想使用单个SQL查询。 (实际的查询更复杂,有几个我试图在这里应用的实例)
为了返回所有行,使用通配符似乎是下一个最佳选项,但似乎没有任何东西可以正常工作。例如,sql查询是:
SELECT *
FROM MY_DB.MY_TABLE
WHERE PROC_TYPE = ?
传入proc_type
的字符串时,以下内容有效:
sqlExecute(connHandle, getSQL(SQL_script_path), proc_type, fetch = TRUE)
为了基本上绕过这个过滤器,我想传递一个通配符,以便返回所有记录。
我已尝试将proc_type
设置为'%'
,'*'
。还使用反斜杠转义并用双引号括起来,但是不会返回任何行,也不会产生任何错误。
答案 0 :(得分:2)
您可以使用COALESCE执行此操作:
SELECT *
FROM MY_DB.MY_TABLE
WHERE PROC_TYPE = COALESCE(?, PROC_TYPE);
如果您的参数为NULL,它将选择PROC_TYPE与PROC_TYPE进行比较,PROC_TYPE将返回所有内容。
至于您的通配符尝试,您必须切换到可以使用通配符的运算符。而不是=
,LIKE
。我认为你最终会遇到一些奇怪的边缘情况,虽然取决于你的搜索项和该列中的数据,所以COALESCE()
选项是一个更好的方法。