我是SQL Server的新手,我有一些Oracle和Oracle的经验和实践。我希望在SQL Server中使用的PostgreSQL。
我需要创建一个函数,该函数为表中的新行获取字段值,并且还返回新记录的自动生成的ID值。
首先,我面临的事实是SQL Server中的函数无法更改表中的数据。我发现的第二个问题是,SQL Server中的过程可以通过return @result
构造返回值。
我调查了DML查询的output
机制,但它们不返回标量而是返回表结果。
要有耐心,让我更清楚。有PostgreSQL功能可以做我想要的:
表创建脚本:
create table foobar
(
foo bigint not null default nextval('s_foobar'::regclass),
bar character varying(16),
constraint pk_foobar primary key (foo)
);
和功能脚本:
create or replace function f_foobar_insert(p_bar character varying)
returns integer as
$body$declare
result integer;
begin
insert into foobar(bar) values (p_bar) returning foo into result;
return result;
end;$body$ language plpgsql;
是否有可能以相同的方式在SQL Server中制作类似的内容?
答案 0 :(得分:2)
在SQL Server中,表创建将是:
create table foobar
(
foo bigint not null identity primary key,
bar varchar(16)
);
以下是SQL Server获取功能的一种方法:
insert into foobar(bar) select 'value';
select @@identity;
这不是真正的首选方式。你应该真的使用output
子句:
declare @t table (foo bigint);
insert into foobar(bar)
output inserted.foo into @t
select 'value';
select foo from @t;
如果愿意,可以将它包装在存储过程中,但似乎没有必要,并且存储过程与函数具有不同的语义。