Вставка AutoIncrementID в БД - PullRequest
       0

Вставка AutoIncrementID в БД

2 голосов
/ 16 ноября 2011

Привет, у меня проблемы с вставкой увеличенного идентификатора пользователя в мою базу данных ниже. Это моя таблица, сохраненный процесс и мой код.

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();
    

Любая помощь действительно ценится благодаря

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011
   Select @userID = @@Identity // this one just get the latest id that we inserted   right?

Нет, вы должны использовать SCOPE_IDENTITY().@@ Identity возвращает последний идентификатор, да, но не последний идентификатор из вашей вставки.Если у вас есть триггер, например, который также производит вставку в другую таблицу в результате вашей вставки, вы получите идентификатор, вставленный в другую таблицу с помощью этого триггера.

Вотхорошая статья , объясняющая различия.

Что касается вставки значений автоинкремента в вашу таблицу;Вы не можете сделать это, если сначала не отключите ограничение, но по сути это не должно быть необходимо, если вы не выполняете какой-либо импорт данных.В вашем сценарии вы сможете просто вставить значения в другие столбцы, кроме поля идентификатора с автоинкрементом.База данных позаботится о вставке подходящего значения для вас.

2 голосов
/ 16 ноября 2011

Если у вас есть поле AUTOINCREMENT, вы НЕ ДОЛЖНЫ вставлять и генерировать значения вообще.БД все делает сам.Итак, удалите код, который вставляет ID-ы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...