Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SCOPE_IDENTITY() не понимаю  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
в одной процедуре два раза используется SCOPE_IDENTITY() после второга раза возвращает нул. почему? вне процедуру возвращает в обоих случаях

ALTER PROCEDURE 
AS
BEGIN
	SET NOCOUNT ON;
	
	SET XACT_ABORT ON   
	BEGIN TRANSACTION 
	

		INSERT INTO [люди].[Все]
				   (...)
			 VALUES
				   (...)
		
		SET @ЧелИД2 = SCOPE_IDENTITY()
		END

	
	INSERT INTO [люди].[Отношения]
			   (...)
		 VALUES
			   (...)
			   
		
	SET @НовЗапСвязь = SCOPE_IDENTITY()

	COMMIT TRANSACTION
		
END
4 ноя 15, 12:58    [18368469]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
SCOPE_IDENTITY
Guest
Алексаша,

begin-end хотя бы расставь нормально
4 ноя 15, 13:13    [18368535]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
вне процедуры пробовал на др. табл.
короче не работает т.к. хотелось бы потомучто на 2 табл. есть тригеры instead of insert. как только его отключаю все работатет. получается надо переделывать тригер ...
4 ноя 15, 13:13    [18368537]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
SCOPE_IDENTITY,

да. вы правы. просто по-быстрому убрал все лишнее
4 ноя 15, 13:14    [18368539]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
Rankatan
Guest
Если триггер INSTEAD OF то нужно использовать @@IDENTITY вместо SCOPE_IDENTITY()
4 ноя 15, 14:50    [18368868]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Rankatan
Если триггер INSTEAD OF то нужно использовать @@IDENTITY вместо SCOPE_IDENTITY()
А если в триггере INSTEAD OF INSERT происходит вставка в другую таблицу с IDENTITY?
4 ноя 15, 19:18    [18369823]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
Rankatan
Guest
Если в триггере вставка в несколько таблиц

То тогда использовать IDENT_CURRENT('dbo.Table'), плюс это выполнять в транзакции с уровнем изоляции SERIALIZABLE
4 ноя 15, 19:28    [18369860]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
Есть пробелы в понимании .., Хочу использовать SCOPE_IDENTITY() чтобы быть уверенным что это тот ИД кот. был вставлен именно этим пользователем в данном сеансе - это раз, ну и не хочется чтоб у пользователя были права на просмотр метаданных, а без них не работает IDENT_CURRENT('dbo.Table') и @@IDENTITY, получается надо переделывать триггер.
5 ноя 15, 11:37    [18372199]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Алексаша,

а output что мешает использовать?
5 ноя 15, 12:17    [18372529]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
WarAnt
Алексаша,

а output что мешает использовать?
Он работает аналогично SCOPE_IDENTITY(), но позволяет получить все вставленные IDENTITY.
Если нет триггера INSTEAD OF INSERT
5 ноя 15, 12:25    [18372600]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Есть по крайней мере один надёжный способ, но он вряд ли понравится,
хотя я у себя применяю, и о прблемах думать забыл.
Создать ещё одно служебное поле (например, типа UNIQUEIDENTIFIER)
и заполнять его в INSERTе заранее сгенерированным функцией NEWID()
и сохранённым в переменной значением. Тогда ничего не стоит выбрать
все только что вставленные записи со значениями в поле IDENTITY.

Чувствую, меня сейчас будут бить...
5 ноя 15, 12:43    [18372730]     Ответить | Цитировать Сообщить модератору
 Re: SCOPE_IDENTITY() не понимаю  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 392
iap,

Спасибо. Возьму на заметку.
5 ноя 15, 14:13    [18373468]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить