将SQL-Server特定的INSERT查询转换为PostgreSQL

时间:2012-12-21 12:13:58

标签: sql-server postgresql postgresql-9.1 sql-insert

我有一个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特定的查询。

1 个答案:

答案 0 :(得分: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 / FALSE / NULL。你当然不希望这样。

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

这样的函数
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);

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