行插入功能

时间:2014-09-21 14:29:10

标签: sql sql-server postgresql tsql

我是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中制作类似的内容?

1 个答案:

答案 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;

如果愿意,可以将它包装在存储过程中,但似乎没有必要,并且存储过程与函数具有不同的语义。