Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как перехватить "id" только что созданной записи ??? / 10 сообщений из 10, страница 1 из 1
13.09.2008, 12:57
    #35537600
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Как перехватить "id" только что созданной записи ???

Использую C# + MS SQL (using System.Data.SqlClient;)
...
Рейтинг: 0 / 0
13.09.2008, 13:12
    #35537611
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Ее "перехватывать" не надо. Ее нужно просто вернуть клиенту.
...
Рейтинг: 0 / 0
13.09.2008, 14:44
    #35537665
IvanN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Попробуйте после запроса вставки выполнить
Код: plaintext
SELECT @@IDENTITY
--------------------------
Хорошему коту всегда март
...
Рейтинг: 0 / 0
13.09.2008, 16:20
    #35537716
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
IvanNПопробуйте после запроса вставки выполнить
Код: plaintext
SELECT @@IDENTITY
--------------------------
Хорошему коту всегда март
Не учите человека плохим вещам :-)
Правильно:
Код: plaintext
SELECT SCOPE_IDENTITY()
Ещё как вариант - в MSSQL 2005 для запросов появилась опция OUTPUT, которая позволяет вернуть сразу из запроса. Например:
Код: plaintext
INSERT INTO T OUTPUT INSERTED.ID VALUES(...)
...
Рейтинг: 0 / 0
13.09.2008, 18:43
    #35537770
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Чорный Бада IvanNПопробуйте после запроса вставки выполнить
Код: plaintext
SELECT @@IDENTITY
--------------------------
Хорошему коту всегда март
Не учите человека плохим вещам :-)
Правильно:
Код: plaintext
SELECT SCOPE_IDENTITY()
Ещё как вариант - в MSSQL 2005 для запросов появилась опция OUTPUT, которая позволяет вернуть сразу из запроса. Например:
Код: plaintext
INSERT INTO T OUTPUT INSERTED.ID VALUES(...)

+1
Вариант с output самый надежный. Т.к. есть один случай с триггером, когда scope вернёт не то значение, которое мы ожидаем. Про @@Identity нужно вообще забыть.
...
Рейтинг: 0 / 0
13.09.2008, 19:13
    #35537778
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
МСУТ.к. есть один случай с триггером, когда scope вернёт не то значение, которое мы ожидаем.
А что за случай? Я что-то минут десять ломал голову как бы такое сделать, но так и не придумал.
...
Рейтинг: 0 / 0
13.09.2008, 20:17
    #35537845
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Чорный Бада МСУТ.к. есть один случай с триггером, когда scope вернёт не то значение, которое мы ожидаем.
А что за случай? Я что-то минут десять ломал голову как бы такое сделать, но так и не придумал.
Со SCOPE_IDENTITY будет косяк, если на таблице instead of триггер сидит и постит в эту таблицу.
...
Рейтинг: 0 / 0
13.09.2008, 20:51
    #35537881
Чорный Бада
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
МСУСо SCOPE_IDENTITY будет косяк, если на таблице instead of триггер сидит и постит в эту таблицу.
Точно. Я сам не допёр :-) Но тут всё равно засада - OUTPUT не работает на таблицах с триггерами на ту операцию в которой он участвует. Можно разве что в сам триггер вставить его в команду которая вставку делает.
...
Рейтинг: 0 / 0
14.09.2008, 00:06
    #35538009
IvanN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Каюсь, не обратил внимания,что бд мс скл а не аксес. Конечно же в нем SELECT scope_identity() а не то что я посоветовал. Виноват.
...
Рейтинг: 0 / 0
14.09.2008, 02:29
    #35538053
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перехватить "id" только что созданной записи ???
Чорный БадаТочно. Я сам не допёр :-) Но тут всё равно засада - OUTPUT не работает на таблицах с триггерами на ту операцию в которой он участвует. Можно разве что в сам триггер вставить его в команду которая вставку делает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE VIEW dbo.vw_ScrapReason
AS (SELECT ScrapReasonID, Name, ModifiedDate
    FROM Production.ScrapReason);
GO

CREATE TRIGGER dbo.io_ScrapReason 
    ON dbo.vw_ScrapReason
INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO Production.ScrapReason (Name, ModifiedDate)
        OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, 
               INSERTED.ModifiedDate
    SELECT Name, getdate()
    FROM inserted;
END
GO

INSERT vw_ScrapReason (ScrapReasonID, Name, ModifiedDate)
VALUES ( 99 , N'My scrap reason', '20030404');
GO
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как перехватить "id" только что созданной записи ??? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]