У меня есть этот код:
string insertSql =
"INSERT INTO aspnet_GameProfiles(UserId,GameId) VALUES(@UserId, @GameId)";
using (SqlConnection myConnection = new SqlConnection(myConnectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(insertSql, myConnection);
myCommand.Parameters.AddWithValue("@UserId", newUserId);
myCommand.Parameters.AddWithValue("@GameId", newGameId);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
Когда я вставляю в эту таблицу, у меня вызывается столбец первичного ключа auto_increment int GamesProfileId
, как я могу получить последний вставленный после него, чтобы я мог использовать этот идентификатор для вставки в другую таблицу?
c#
sql
sql-server
anthonypliu
источник
источник
OUTPUT INSERTED.ID
может вызвать проблемы в случае активного триггера на столеВы можете создать команду с
CommandText
равными выполнить
int id = (int)command.ExecuteScalar
.Эта статья MSDN даст вам несколько дополнительных приемов.
источник
Это сработает :)
источник
У меня была такая же потребность и я нашел этот ответ ..
Это создает запись в таблице компании (comp), она захватывает автоматический идентификатор, созданный в таблице компании, и помещает его в таблицу персонала (персонала), чтобы можно было связать 2 таблицы, МНОГО сотрудников из ОДНОЙ компании. Он работает на моей базе данных SQL 2008, должен работать на SQL 2005 и выше.
===========================
- @recID используется для хранения автоматически сгенерированного идентификационного номера Компании, который мы собираемся получить.
- Строка выше используется для создания временной таблицы для хранения автоматически сгенерированного идентификационного номера для последующего использования. Он имеет только одно поле 'tempID', а его тип INT совпадает с '@recID' .
- ВЫХОД вставлен. 'строка выше используется для извлечения данных из любого поля в записи, которую он создает прямо сейчас. Эти данные, которые мы хотим, являются идентификатором autonumber. Поэтому убедитесь, что в нем указано правильное имя поля для вашей таблицы, у меня 'comp_id' . Затем он помещается в таблицу временных показателей, которую мы создали ранее.
- Приведенная выше строка используется для поиска в таблице темпораций, которую мы создали ранее, где сохранен нужный нам идентификатор. Поскольку в этой таблице временных данных есть только одна запись и только одно поле, она выберет только тот номер ID, который вам нужен, и поместит его в @recID . « @recID » теперь имеет желаемый идентификационный номер, и вы можете использовать его так, как хотите, как я использовал ниже.
- Итак, поехали. На самом деле вы можете получить то, что вы хотите, в строке «OUTPUT вставлен. WhatEverFieldNameYouWant » и создать поля, которые вы хотите в своей таблице временных данных, и получить к ним доступ, чтобы использовать их, как вам угодно.
Я искал что-то подобное целую вечность, с этим подробным описанием, надеюсь, это поможет.
источник
В чистом SQL основное утверждение kools вроде:
Квадратные скобки определяют символы таблицы, а затем столбцы En и ID, круглые скобки определяют перечисление столбцов, которые должны быть инициированы, а затем значения для столбцов, в моем случае один столбец и одно значение. Апострофы заключают в себе строку
Я объясню вам мой подход:
Это может быть нелегко понять, но я надеюсь, что полезно получить общую картину, используя последний вставленный идентификатор. Конечно, есть альтернативные, более простые подходы. Но у меня есть причины, чтобы сохранить мои. Связанные функции не включены, только их имена и имена параметров.
Я использую этот метод для медицинского искусственного интеллекта. Метод проверяет, существует ли искомая строка в центральной таблице (1). Если искомая строка отсутствует в центральной таблице «simbs» или разрешены дубликаты, искомая строка добавляется в центральную таблицу «simbs» (2). Последний вставленный идентификатор используется для создания связанной таблицы (3).
источник
Я пробовал выше, но они не работали, я нашел эту мысль, которая прекрасно работает для меня.
Его меньше кода, и я легко вставить.
Надеюсь, это кому-нибудь поможет.
источник
Вы также можете использовать вызов SCOPE_IDENTITY в SQL Server.
источник
источник
Есть все виды способов получить последний вставленный идентификатор, но самый простой способ, который я нашел, - это просто извлечь его из адаптера таблицы в DataSet, например так:
Надеюсь это поможет ...
источник
После вставки любой строки вы можете получить последний вставленный идентификатор ниже строки запроса.
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId); ВЫБЕРИТЕ @@ IDENTITY
источник
Используйте SELECT SCOPE_IDENTITY () в запросе
источник
После этого:
Выполнить это
Это сработает
источник
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId) "; тогда вы можете просто получить доступ к последнему идентификатору, упорядочив таблицу по порядку.
ВЫБЕРИТЕ ТОП 1 UserId ИЗ aspnet_GameProfiles ЗАКАЗАТЬ ПО UserId DESC.
источник
источник