Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: последовательности в mssql Добавлено: 27.01.07 21:59  

Автор вопроса:  Neco | Web-сайт: neco.pisem.net | ICQ: 247906854 
мне нуна (очень!) в сиквеле в таблице одно уникальное поле (id), значение которого я бы мог использовать далее.
т.е. как я делаю при работе с ораклом:
1. беру seq_my.nextval() - получаю уникальный id.
2. вставляю новую строку с этим id
3. использую этот id далее как захочу.

в сиквеле я так понял всё делается за счёт полей с автоинкрементом - фиг с ним, делаю:
1. вставляю строку
insert into tabMy (все колонки, кроме id) values(...)
у неё сразу уникальный id.
2. теперь хочу его (id) узнать и не понимаю как.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #1
Добавлено: 27.01.07 23:24
после вставки, select @@identity - возвращает id последнего insert-a на данном коннекте

Ответить

Номер ответа: 2
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #2
Добавлено: 27.01.07 23:44
да, нашёл этот ход, но не понял прикола вообще - а если мне не это поле понадобилось бы возвращать?

Ответить

Номер ответа: 3
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #3
Добавлено: 27.01.07 23:48
что значит не это поле?
@@identity - это последнее значение функции identity(..), т.е. поле с автоинкрементом.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 28.01.07 14:19
Вообще Microsoft вызывает не @@IDENTITY, а SCOPE_IDENTITY().
Если тебе нужно возвращать что-то помимо Identity, то можно сделать так:
; SELECT SomeValue, AnotherValue, SCOPE_IDENTITY()

Можно сделать Output-параметром.

Ответить

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



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 28.01.07 15:16
сделал через @@identity
но вообще хотелось бы какой-нибудь универсальный метод. output-параметр пробовал так
insert into tabname (....) output id into @myvar values (....)
но ни фига не получилось - типо @myvar это должна быть таблица объявленная через declare - на фига мне этот гимор, я не понял...
SCOPE_IDENTITY счас попробую

Ответить

Номер ответа: 6
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #6
Добавлено: 28.01.07 19:00
SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in that they return values inserted into IDENTITY columns

Что SCOPE_IDENTITY, что @@IDENTITY - все одно и тоже.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 28.01.07 19:09
Это не одно и то же.
Посмотри BOL - у этих двух способов разные области действия.

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 28.01.07 21:02
output-параметр пробовал так
insert into tabname (....) output id into @myvar values (....)
но ни фига не получилось - типо @myvar это должна быть таблица объявленная через declare

@myvar - это переменная, которую на самом деле надо объвлять через declare..
Взгляни, как я это делаю в одной из своих хранимок, а там уж разберешься..
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[aspnet_Images_CreateImage]
@GroupName nvarchar(128),
@ContentType nvarchar(128),
@Image varbinary(MAX),
@Alias nvarchar(10),
@Descripton nvarchar(256),
@ImageId int OUTPUT
AS
BEGIN

DECLARE @GroupId int
DECLARE @TypeId int

SET @ImageId = -1

SET @GroupName=dbo.TRIMALL(@GroupName)
SET @ContentType=dbo.TRIMALL(@ContentType)

SET @GroupId = dbo.aspnet_ImagesGroup_GetIdByGroupName(@GroupName)
IF (@GroupId IS NULL)
BEGIN
INSERT INTO aspnet_ImagesGroup
   (GroupName)
VALUES     (@GroupName)
SET @GroupID = @@IDENTITY
END

SET @TypeId = dbo.aspnet_ImagesType_GetIdByType(@ContentType)
IF (@TypeId IS NULL)
BEGIN
INSERT INTO aspnet_ImagesType
                   ;(ContentType)
VALUES     (@ContentType)
SET @TypeID = @@IDENTITY
END

INSERT INTO aspnet_Images
           ;([GroupId]
           ,[TypeId]
           ,[Image]
           ,[Alias]
           ,[;Descripton];)
     VALUES
           ;(@GroupId
           ,@TypeId
           ,@Image
           ,@Alias
           ,@Descripton)

SET @ImageId = @@IDENTITY

END

Ответить

Страница: 1 |

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



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