SQL INSERT с параметром в качестве запроса

0

Как вставить параметр со значением из базы данных. У меня есть поле, и я должен вставить значение из этой базы данных + 1 (плюс плюс один)

Например

myCommand.CommandText =
            "INSERT INTO GAMES (GAME_NR, GAME_PLAYER_ID, GAME_NRONTABLE, GAME_ROLE_ID) " &
            " VALUES (@game_nr, @game_player_id, @game_nrontable, @game_role_id)"

'Example
myCommand.Parameters.Add("@game_nr", SqlDbType.Int).Value = **"(SELECT MAX(GAME_NR) FROM GAMES)" + 1**
Теги:
parameters

2 ответа

0
Лучший ответ

Вам не нужен параметр, вы можете попробовать следующий код.

myCommand.CommandText =
            "INSERT INTO GAMES (GAME_NR, GAME_PLAYER_ID, GAME_NRONTABLE, GAME_ROLE_ID) " &
            " VALUES ((SELECT MAX(GAME_NR) + 1 FROM GAMES), @game_player_id, @game_nrontable, @game_role_id)"

Но он выглядит как первичный ключ таблицы. Если Game_Nr является pr, вы должны использовать auto-inc. то вам не нужен этот параметр.

Это будет.

myCommand.CommandText =
                "INSERT INTO GAMES (GAME_PLAYER_ID, GAME_NRONTABLE, GAME_ROLE_ID) " &
                " VALUES (@game_player_id, @game_nrontable, @game_role_id)"
  • 4
    Как это будет вести себя в многопользовательской среде? Например, текущий MAX(GAME_NR) = 100 . Тогда вы и я запускаем INSERT вы предлагаете, и для нас обоих MAX + 1 = 101 . Если GAME_NR был первичным ключом ... хм?
  • 0
    спасибо Littlefoot за предупреждение, я отредактирую свой ответ. Но я не согласен с тобой. Я думаю, сначала будет выполнено 101, а затем 102.
Показать ещё 1 комментарий
2

Вы этого не сделаете. Вы делаете GAME_NR и автоматически увеличивающийся первичный ключ:

create table games (
    game_nr int auto_increment primary key,
    . . .
);

Затем вы вставляете как:

INSERT INTO GAMES (GAME_PLAYER_ID, GAME_NRONTABLE, GAME_ROLE_ID)
    VALUES (@game_player_id, @game_nrontable, @game_role_id);

Пусть база данных выполнит эту работу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню