序列ID我这样做:选择/显示最后插入在SQL Server的Postgres
insert into foo(name) values('bob')
select @@identity;
,所以我得到的查询/标量结果显示
如何将此与Postgres的?
序列ID我这样做:选择/显示最后插入在SQL Server的Postgres
insert into foo(name) values('bob')
select @@identity;
,所以我得到的查询/标量结果显示
如何将此与Postgres的?
这将是
GET DIAGNOSTICS YourParam = RESULT_OID;
请看这里http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html向下滚动到37.6.6。获取结果状态
提问者编辑: 我尝试这样做:
create or replace function aaa() returns int as $$
declare
a int;
begin
insert into oameni values(default, 'aaa');
get diagnostics a = result_oid;
return a;
end;
$$ language plpgsql;
它总是返回0,你知道什么是错在这里?
获取特定的顺序:
SELECT currval('name_of_your_sequence');
获取从最后一个序列的最后一个值使用:
SELECT lastval();
检查手册,以及:http://www.postgresql.org/docs/current/static/functions-sequence.html
编辑:您还可以使用返回您的INSERT:
INSERT INTO foo(id, name) VALUES(DEFAULT, 'bob') RETURNING id;
一个好方法是使用RETURNING ID。这里是使用PL/pgSQL的一个简短例子:
DECLARE
nivel1 RECORD;
resultId BIGINT;
BEGIN
FOR nivel1 IN SELECT * FROM primary_table LOOP
INSERT INTO second_table(id, field2, field3) VALUES (DEFAULT, "value2", "value3") RETURNING id INTO resultId;
RAISE NOTICE 'Inserted id: %s', quote_literal(resultId);
END LOOP;
RETURN;
END
它适合我!
不要在SQL Server中使用'@@ identity'。使用[SCOPE_IDENTITY()](http://msdn.microsoft.com/en-us/library/ms190315.aspx)反而更安全,以避免触发器的潜在问题。 – 2010-09-10 19:30:08