我正在创建一个存储过程来创建一个新客户,例如,
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
吗?如果是这样,这是如何工作的代码
答案 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)
在您的情况下,您也可以像这样尝试@IDENTITY
DECLARE @NextID int
--insert statement goes here
SET @NextID = @@Identity`
以下是熟悉这个
的好资源