Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: webserge.no-ip.info
 Профиль | | #1
Добавлено: 11.06.05 04:00
SELECT tkey
FROM MyTbl
WHERE tname='кружка';

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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-сайт: webserge.no-ip.info
 Профиль | | #3
Добавлено: 11.06.05 12:08
2 Павел: Согласен такой случай может иметь место, но, с другой стороны, если руководствоваться первым принципом нормализации баз данных, то мы там видим следующее:
каждый атрибут отношения должен хранить одно-единственное значение и не являться ни списком, ни множеством значений.

Ответить

Номер ответа: 4
Автор ответа:
 sergee



ICQ: 345653131 

Вопросов: 10
Ответов: 23
 Web-сайт: webserge.no-ip.info
 Профиль | | #4
Добавлено: 11.06.05 12:15
Т.е. другими словами при правильном подходе к проектированию базы данных не должно получится так что в таблице несколько раз встречается одно и тоже значение (например 'кружка').

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 11.06.05 14:40
Dim SQL As String = "INSERT INTO MyTbl (tname) VALUES ('кружка'); SELECT @@IDENTITY FROM MyTbl"


Не понял... А зачем в конце нужен FROM MyTbl???
Ведь @@IDENTITY просто возвращает номер последнего созданного уникального ключа в БД, т.е. запрос можно делать так:

Dim SQL As String = "INSERT INTO MyTbl (tname) VALUES ('кружка'); SELECT @@IDENTITY


Или я что-то пропустил?

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 12.06.05 08:15
Да, ты прав. Вот, что говорит BOL:

After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY contains the last identity value generated by the statement. If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. If a trigger is fired after an insert action on a table that has an identity column, and the trigger inserts into another table that does not have an identity column, @@IDENTITY will return the identity value of the first insert.The @@IDENTITYvalue does not revert to a previous setting if the INSERT or SELECT INTO statementor bulk copy fails, or if the transaction is rolled back.

Ответить

Номер ответа: 7
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #7
Добавлено: 18.06.05 01:06
2 sergee
В принципе ты прав, но вопрос был не об этом

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам