使用:参数运行SQL查询(针对postgres)的任何工具,而无需手动替换它们?

时间:2014-09-25 12:51:10

标签: c# sql postgresql

让我说我有一个查询

select * from orders   where company=:company

我通过在代码中设置参数来运行它。

一切都很好,但是如果我想在我的sql工具中运行此查询(例如pgadmin)但我不想手动用实际值替换参数(真正的查询有5个参数并且非常大)

是否有工具或方法来运行查询并在某处设置参数值,以便它们在查询中使用,就好像它是从代码运行一样?

如果它是相关的,我使用C#和NHibernate(但在这种情况下我使用本机SQL查询)和Postgresql。

编辑:要求:不应以任何方式更改SQL查询文本,应使用“:”字符指定参数,而不是任何其他方式。它不应该是命令行工具(但是具有可视UI的东西)。

2 个答案:

答案 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行。当你快乐时,只需找到并替换" _"进入" :"你会得到你的疑问。