将自动增量ID插入DB

时间:2011-11-16 16:30:25

标签: c# sql-server tsql

您好我在我的数据库中插入递增的用户ID是我的表,存储过程和我的代码。

CREATE TABLE [dbo].[Assignment2]
(
userID int PRIMARY KEY IDENTITY(1,1),
Name varchar(255) NOT NULL,
Age int NOT NULL,
Hobbies varchar(255)
)

和存储过程

ALTER PROCEDURE [db].[p_Assignment2_ins]
        @userID           int,
        @Name             nvarchar(100),
        @Age              int,
        @Hobbies          nvarchar(100)                   
AS

INSERT INTO [DB].[db].[Assignment2]
           ([Name]
           ,[Age]
           ,[Hobbies])
     VALUES
           (@Name
           ,@Age
           ,@Hobbies)


If @@Error <> 0
    Return -1

    Select @userID = @@Identity // this one just get the latest id that we inserted                 right?

Return 0 

我有一些问题:

  1. 我想知道如何从后面的代码中插入UserID因为如果表一开始是空的,我们不应该先将数据插入表中

  2. 我们如何从代码隐藏生成AutoIncrementID并插入

            SqlConnection conn = new SqlConnection(ts.ConnMethod());
            SqlCommand cmd = new SqlCommand("p_Assignment2_ins", conn);
            cmd.CommandType = CommandType.StoredProcedure;
    
            //I'm missing how we should add the IncrementedID 
    
            cmd.Parameters.AddWithValue("@Name", TextBox1.Text);
            cmd.Parameters.AddWithValue("@Age", TextBox2.Text);
            cmd.Parameters.AddWithValue("@Hobbies", TextBox3.Text);
    
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
    
  3. 非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

   Select @userID = @@Identity // this one just get the latest id that we inserted   right?

不,你应该使用SCOPE_IDENTITY()。 @@ Identity返回最后一个ID,是,但不是您的插入的最后一个ID。例如,如果你有一个触发器,它也会因为你的插入而在另一个表上产生一个插入,那么你将通过该触发器将id插入到另一个表中。

Here's a nice article解释了这些差异。

在您的桌子上插入自动增量值;除非先禁用约束,否则不能这样做,但实质上,除非您正在进行某种数据导入,否则这不是必需的。在您的方案中,您应该能够在除了具有自动增量的标识字段之外的其他列上插入值。数据库将负责为您插入适当的值。

答案 1 :(得分:2)

如果你有AUTOINCREMENT字段,你不应该插入并生成值。 DB正在完成所有工作。因此,删除插入ID-s的代码