0

我有一个 SQL Server 2008 特定查询,如何在 PostgreSQL 中执行相同的查询。

INSERT INTO profile_answers_new (pro_ans_frn_pro_id, pro_ans_name)
SELECT pro_ans_frn_pro_id = @new_pro_id , pro_ans_name
FROM profile_answers_old WHERE profile_id = 1

如何将此查询转换为特定于 PostgreSQL 的查询。

4

1 回答 1

2

PostgreSQL 中的普通 SQL 中没有变量。您可以将文字常量按原样写入SELECT语句中。

INSERT INTO profile_answers_new (pro_ans_frn_pro_id, pro_ans_name)
SELECT 1234, pro_ans_name     -- 1234 being @new_pro_id (integer)
FROM   profile_answers_old
WHERE  profile_id = 1

像您在原始语句 () 中的表达式将pro_ans_frn_pro_id = @new_pro_id被评估为TRUE// FALSENULL你当然不希望那样。

如果你想提交一个参数,你必须创建一个函数,如:

CREATE OR REPLACE FUNCTION foo(int)
  RETURNS void LANGUAGE sql AS
$func$
INSERT INTO profile_answers_new (pro_ans_frn_pro_id, pro_ans_name)
SELECT $1, pro_ans_name
FROM   profile_answers_old
WHERE  profile_id = 1;
$func$;

称呼:

SELECT foo(1234);

但我怀疑,这就是你想要的。

于 2012-12-27T07:06:49.930 回答