SQL Server使用SCOPE_IDENTITY

时间:2017-01-07 18:38:01

标签: c# sql sql-server

我有两张桌子:

CREATE TABLE [dbo].[Accessoires1]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [ClientID] [int] NOT NULL,
    [TotalPrice] [varchar](50) NOT NULL
)

CREATE TABLE [dbo].[Accessoires2]
(
    [Accessoire1_ID] [int],
    [Date] [datetime] NOT NULL,
    [ClientID] [int] NOT NULL,
    [TotalPrice] [varchar](50) NOT NULL
)

然后我有一个存储过程Proc1,它将值插入表Accessoire1,我有Proc2将数据添加到accessoires2 - 但它需要一个特定的{ {1}}

在我的C#代码中,我在同一时间执行这些程序,因此我需要将accessoire1_ID插入Accessoires1.ID - 我该如何设法做到这一点?

1 个答案:

答案 0 :(得分:2)

在第一个程序中执行此操作:

CREATE PROCEDURE nameOfSp
    @col1            VARCHAR(20),
    @newId           INT    OUTPUT
AS
BEGIN
    SET NOCOUNT ON

    -- your code

    -- assign identity to variable
    SELECT @newId = SCOPE_IDENTITY()

    RETURN
END

你的c#代码需要调用第一个存储过程并传递一个输出参数,如下所示:

SqlParameter newId = new SqlParameter();
newId.ParameterName = "@newId";
newId.DbType = DbType.Int32; 
newId.Direction = ParameterDirection.Output;

执行第一个程序后,您的C#代码可以得到newId返回的值,如下所示:

int outValue = (int) newId.Value;

现在你可以将它传递给你的第二个程序。