0

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

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 号,而不必知道在运行执行语句时它会是什么?我想让它拉出 ID 为 2 的事实,因为之前的记录是 1

EXECUTE Customer_Create 16,2

是什么东西output吗?如果是这样,这如何工作代码明智

4

3 回答 3

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;

获取身份还有其他几种选择,在此处进行了说明。

于 2013-04-22T00:05:02.913 回答
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但它们都存在重大问题。有关详细信息,请参阅我的身份危机文章。

于 2013-04-22T00:08:03.033 回答
0

在您的情况下,您也可以像这样尝试@IDENTITY

DECLARE @NextID int
--insert statement goes here
SET @NextID = @@Identity`

这里有几个很好的资源来熟悉这个

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

http://blog.sqlauthority.com/2013/03/26/sql-server-identity-fields-review-sql-queries-2012-joes-2-pros-volume-2-the-sql-query-techniques-教程-for-sql-server-2012/

于 2013-04-23T08:37:10.370 回答