让我说我有一个查询
select * from orders where company=:company
我通过在代码中设置参数来运行它。
一切都很好,但是如果我想在我的sql工具中运行此查询(例如pgadmin)但我不想手动用实际值替换参数(真正的查询有5个参数并且非常大)
是否有工具或方法来运行查询并在某处设置参数值,以便它们在查询中使用,就好像它是从代码运行一样?
如果它是相关的,我使用C#和NHibernate(但在这种情况下我使用本机SQL查询)和Postgresql。
编辑:要求:不应以任何方式更改SQL查询文本,应使用“:”字符指定参数,而不是任何其他方式。它不应该是命令行工具(但是具有可视UI的东西)。
答案 0 :(得分:0)
最简单的方法是将查询包装在函数
中create function f(_company text)
returns setof orders as $$
select *
from orders
where company = _company
;
$$ language sql;
然后在图形客户端
中使用它select * from f('company name');
在C#客户端中,使用相同的参数语法:
select * from f(:company);
使用函数将简化您的代码。它们是可重复使用的。如果仅更改了该功能,则无需重建应用程序。
答案 1 :(得分:0)
您创建了一个并不存在的问题。如果你真的必须使用不同的东西来编写你的查询,那么匿名块是最好的解决方案:
DROP TABLE IF EXISTS foobar;
DO $$
DECLARE _foo TEXT;
DECLARE _bar TEXT;
BEGIN
_foo := 'foo' ;
_bar := 'bar' ;
CREATE TEMP TABLE foobar AS SELECT _foo, _bar;
END $$;
SELECT * FROM foobar;
每个变量还有5行+ 2行。当你快乐时,只需找到并替换" _"进入" :"你会得到你的疑问。