Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
6 / 6 / 0
Регистрация: 12.06.2012
Сообщений: 17

Получение ключевого поля только что добавленной записи

12.06.2012, 12:14. Показов 7368. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Имеется следующий код (MS SQL Server 2008)
Поле id_data это поле с автоприращением.
SQL
1
2
3
4
5
USE test1
BEGIN TRANSACTION
INSERT INTO DATA(name) VALUES('abc')
SELECT id_data FROM DATA WHERE id_data=SCOPE_IDENTITY()
COMMIT TRANSACTION
Он прекрасно выполняется и показывает нужный результат.

Этот же код выполняемый на C# (VS2010pro) через команды sql (cmd.ExecuteNonQuery() и cmd.ExecuteReader()) спотыкается на
SQL
1
SELECT id_data FROM DATA WHERE id_data=SCOPE_IDENTITY()
c сообщением что нет данных для чтения.

Можно ли это заставить работать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2012, 12:14
Ответы с готовыми решениями:

Получить id только что добавленной записи
Здравствуйте. Добавляю запись в таблицу таким вот образом: connect.Open(); cmd.CommandType =...

Как вывести ID только что добавленной записи?
Всем привет! В программе есть 2 TextBox. В первый вводиться ФИО Во второй номер телефона private void button1_Click(object...

Не получается определить код только что добавленной записи
Уже несколько часов читаю в нете как это сделать и никак не получается, вот код, который я написал: string sqlquery =...

21
52 / 37 / 9
Регистрация: 13.06.2019
Сообщений: 209
05.07.2019, 11:28
Студворк — интернет-сервис помощи студентам
Столкнулся с подобной проблемой при обращении к MSSQL через ODBC. Хотя здесь подразумевается ADO, думаю, ситуация ровно та же.

SCOPE_IDENTITY() возвращает NULL потому, что после всех уровней абстракции, выполнение двух инструкций "INSERT ..." и "SELECT SCOPE_IDENTITY()" происходит в разных областях SQL.

Правда, воспроизвести ситуацию в одном SQL-скрипте не получилось. Так как, похоже, это всегда одна область:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
USE tempdb
 
IF NOT EXISTS(SELECT * FROM sys.tables WHERE name='mylog')
    CREATE TABLE mylog(
        id              INT NOT NULL IDENTITY
            CONSTRAINT PK_mylog_id PRIMARY KEY,
        ch_date     datetime2(2) NOT NULL
            CONSTRAINT DF_mylog_ch_date DEFAULT SYSDATETIME(),
        topic           NCHAR(100) NOT NULL,
        msg             NCHAR(500) NOT NULL
    )
    
GO
 
INSERT mylog (topic, msg) VALUES ('test', 'SCOPE_IDENTITY')
DECLARE @id INT
-- в рамках одной области работает как и ожидается даже без транзакции
-- то есть другая "более быстрая" транзакция в этот момент
-- не повлияет на значение нашей SCOPE_IDENTITY
SELECT @id = SCOPE_IDENTITY()
SELECT * FROM mylog WHERE id = @id
GO
 
BEGIN TRAN
INSERT mylog (topic, msg) VALUES ('test', 'IDENT_CURRENT')
GO
 
DECLARE @id INT
SELECT @id = @@IDENTITY -- работает правильно, и через ODBC
 
-- ограничена областью, в случае отдельного запроса через ODBC вернёт NULL
-- SELECT @id = SCOPE_IDENTITY()
 
-- не ограничена транзакцией - для наших целей не годится,
-- так как может вернуть id из более быстрой транзакции
-- SELECT @id = IDENT_CURRENT('mylog')
 
COMMIT TRAN
SELECT * FROM mylog WHERE id = @id
GO


Через ODBC работает именно @@IDENTITY + транзакция
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,914
05.07.2019, 17:13
когда уже откроете для себя предложение output?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2019, 17:13

Отображение значения ключа только что добавленной записи в DataGridView связанного с таблицей на сервере MySQL
Привет! Возник вопрос, который уже задавался наверное много раз, но внятного ответа я не нашел. Смотрите: 1) У меня есть datagridview...

Получение id добавленной записи
Есть таблица, id - счетчик. Можно ли получить id добавленной записи? То есть посылаем запрос на добавление, запись добавляется, а нам в...

Как вернуть ID только что добавленной записи в API?
У меня есть такой метод в контроллере: public ActionResult<Lessons> AddLessons( Lessons lessons) { ...

Получение ключа только что добавленной записи
Как получить в Visual Basic ключ только что добавленной записи в Access? Используется DAO.

Получить ID только что добавленной записи (ID - autoincrement)
Доброго времени суток. Как можно получить ID только что добавленной записи (ID - autoincrement)? Была идея SELECT MAX(ID)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru