Ключевые поля в MSSQL

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AlexCOM10
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 19
Зарегистрирован: 13.05.2005 (Пт) 11:03

Ключевые поля в MSSQL

Сообщение AlexCOM10 » 09.06.2005 (Чт) 18:19

Здравствуйте!!
в MSSQL есть таблица с полями: tkey и tname, где tkey-ключевое поле!!
выполняю команду вставки
INSERT INTO MyTbl (tname) VALUES ('кружка')
каким образом мне узнать значение ключевого поля этой строки, которое было добавленно автоматически??
При этом значения поля tname могут быть дублированными

Все это я делаю с помощью VB.NET, помогите если сможете!!!

Спасибо!!!!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 10.06.2005 (Пт) 0:49

поищи на gotdotnet.ru
там таких тем миллион, или Гайдар ответит...

хотя никто не мешает в транзакции посмотреть....
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

val
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 14.11.2002 (Чт) 1:14

Сообщение val » 10.06.2005 (Пт) 14:49

Используй @@IDENTITY

Код: Выделить всё
@@IDENTITY
Returns the last-inserted identity value.

Syntax
@@IDENTITY

Return Types
numeric

Remarks
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. The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions in that they return the last value inserted into the IDENTITY column of a table.

@@IDENTITY and SCOPE_IDENTITY will return the last identity value generated in any table in the current session. However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. For more information, see IDENT_CURRENT.

Examples
This example inserts a row into a table with an identity column and uses @@IDENTITY to display the identity value used in the new row.

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

[/quote]

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 10.06.2005 (Пт) 17:00

Надо юзать Хранимые процедуры, пример:

CREATE PROCEDURE AddVelue
(
@Value
)

INSERT INTO MyTbl (tname) VALUES (@Value)

RETURN @IDENTITY

В коде пишешь:

Dim con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand("AddValue", con)
cmd.CommandType = CommandType.StoredProcedure
Dim p As New SqlParameter
p.ParameterType = ParameterType.ReturnValue
p.ParameterName = "RETVAL"
cmd.Parameters.Add(p)
con.Open()
cmd.ExecuteNonQuery()
con.Close()

cmd.Parameters["RETVAL"].Value - и есть то, что нужно
Последний раз редактировалось gaidar 10.06.2005 (Пт) 17:01, всего редактировалось 1 раз.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 10.06.2005 (Пт) 17:01

Используя MS SQL не использовать ХП - это просто преступление!
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

    TopList