Страница: 1 |
Страница: 1 |
Вопрос: Ключевые поля
Добавлено: 09.06.05 19:21
Автор вопроса: Alex10 | ICQ: 243869817
Здравствуйте!!
в MSSQL есть таблица с полями: tkey и tname, где tkey-ключевое поле!!
выполняю команду вставки
INSERT INTO MyTbl (tname) VALUES ('кружка')
каким образом мне узнать значение ключевого поля этой строки, которое было добавленно автоматически??
При этом значения поля tname могут быть дублированными
Все это я делаю с помощью VB.NET, помогите если сможете!!!
Спасибо!!!!
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
sergee
ICQ: 345653131
Вопросов: 10
Ответов: 23
Web-сайт:
Профиль | | #1
Добавлено: 11.06.05 04:00
SELECT tkey
FROM MyTbl
WHERE tname='кружка';
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 11.06.05 09:33
2 sergee: неправильный вариант. Если строк, где tname="кружка" много,
то вся логика программы пойдёт спать.
Нужно так:
Dim SQL As String = "INSERT INTO MyTbl (tname) VALUES ('кружка'); SELECT @@IDENTITY FROM MyTbl"
Dim Comm As New SqlCommand(SQL, Conn)
Dim DR As SqlDataReader = Comm.ExecuteReader()
If DR.Read Then
Console.WriteLine "первичный ключ вставленной записи: " & DR(0).ToString
End If
DR.Close()
Номер ответа: 3
Автор ответа:
sergee
ICQ: 345653131
Вопросов: 10
Ответов: 23
Web-сайт:
Профиль | | #3
Добавлено: 11.06.05 12:08
2 Павел: Согласен такой случай может иметь место, но, с другой стороны, если руководствоваться первым принципом нормализации баз данных, то мы там видим следующее:
каждый атрибут отношения должен хранить одно-единственное значение и не являться ни списком, ни множеством значений.
Номер ответа: 4
Автор ответа:
sergee
ICQ: 345653131
Вопросов: 10
Ответов: 23
Web-сайт:
Профиль | | #4
Добавлено: 11.06.05 12:15
Т.е. другими словами при правильном подходе к проектированию базы данных не должно получится так что в таблице несколько раз встречается одно и тоже значение (например 'кружка').
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 11.06.05 14:40
Не понял... А зачем в конце нужен FROM MyTbl???
Ведь @@IDENTITY просто возвращает номер последнего созданного уникального ключа в БД, т.е. запрос можно делать так:
Или я что-то пропустил?
Номер ответа: 6
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #6
Добавлено: 12.06.05 08:15
Да, ты прав. Вот, что говорит BOL:
Номер ответа: 7
Автор ответа:
⊗WaX⊗
Вопросов: 26
Ответов: 325
Web-сайт:
Профиль | | #7
Добавлено: 18.06.05 01:06
2 sergee
В принципе ты прав, но вопрос был не об этом