存储过程 - 了解下一个ID

时间:2013-04-21 23:55:59

标签: sql sql-server sql-server-2012

我正在创建一个存储过程来创建一个新客户,例如,

CREATE PROCEDURE Customer_Create
@customer_arg
@type_arg
AS
BEGIN
INSERT INTO Customer (Customer_id, Type_id)
VALUES (@Customer_arg,@type_arg)
End;

如果我的声明中有多个外键并且它们都是ID,那么我可以自动提取NEXT ID号,而不必知道当我运行execute语句时它会出现什么问题。 ?我想让它知道ID为2,因为之前的记录是1

EXECUTE Customer_Create 16,2

这是output吗?如果是这样,这是如何工作的代码

3 个答案:

答案 0 :(得分:1)

我怀疑你想要做的是在插入记录后返回新的id。为此:

CREATE PROCEDURE Customer_Create (
    @customer_arg,
    @type_arg,
    @NewCustomerId int output
) AS
BEGIN
    INSERT INTO Customer(Customer_id, Type_id)
        VALUES (@Customer_arg, @type_arg);

    @NewCustomerId = scope_identity();
End;

获取身份还有其他几种选择,解释为here

答案 1 :(得分:1)

要获取最后插入的IDENTITY值,您应该使用OUTPUT子句,如下所示:

DECLARE @IdentValues TABLE(v INT);

INSERT INTO dbo.IdentityTest 
OUTPUT INSERTED.id INTO @IdentValues(v)
DEFAULT VALUES;

SELECT v AS IdentityValues FROM @IdentValues;

还有其他几种机制,例如@@IDENTITY,但它们都存在重大问题。有关详细信息,请参阅我的Identity Crisis文章。

答案 2 :(得分:0)