powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сброс SCOPE_IDENTITY
19 сообщений из 19, страница 1 из 1
Сброс SCOPE_IDENTITY
    #32484357
Edo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edo
Гость
----------------------------------------
CREATE TABLE [dbo].[test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[about] [char] (10) NULL
) ON [PRIMARY]
----------------------------------------
CREATE TABLE [dbo].[test_detail] (
[id] [int] NOT NULL ,
[about_detail] [char] (10) NULL
) ON [PRIMARY]
----------------------------------------
почему выполнение данного скрипта выдаст ошибку?
insert into test(about) values('master');
insert into test_detail(id, about_detail) values(SCOPE_IDENTITY(), 'detail-1');
insert into test_detail(id, about_detail) values(SCOPE_IDENTITY(), 'detail-2');

одним словом - почему SCOPE_IDENTITY() сбрасывает свое значение в NULL после вставки записи в таблицу test_detail, в которой ни о каких полях identity речи не идет? Получается, что SCOPE_IDENTITY() становится NULL при любых инсертах в таблицу из БД. Но это же нонсенс!!!
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484366
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв которой ни о каких полях identity речи не идет?
Потому и сбрасывает, что не идет речи.
Читаем после первого инсерта scope_identity в переменную и далее пользуемся ею.
авторПолучается, что SCOPE_IDENTITY() становится NULL при любых инсертах в таблицу из БД. Но это же нонсенс!!!
Наоборот, очень даже логично.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484375
Edo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edo
Гость
Я позволю не согласится и процитировать официальную документацию:
"Returns the last IDENTITY value inserted into an IDENTITY column in the same scope."
Перевод: "Возвращает последнее значение IDENTITY вставленное в поле IDENTITY". Я именно в IDENTITY вторым и третьим инсертом не вставляю. Я вставляю в другую таблицу, где полей с IDENTITY нет вообще.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484395
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ именно в IDENTITY вторым и третьим инсертом не вставляю
не дочитали:
FIXED]The SCOPE_IDENTITY() function will return the NULL value if the function is invoked before any insert statements into an identity column occur in the scope
Во втором инсерте у Вас как раз это is invoked before any insert statements into an identity column occur in the scope
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484412
stakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Гавриленко Сергей Алексеевич

Да как же так? В нашем случае это не работает.
В нашем случае scope - это батч. А в батче уже вызывалось insert statements into an identity column.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484422
stakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В нашем случае подходит вот что по идее:
BOL : If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484436
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА в батче уже вызывалось insert statements into an identity column.
В предыдущем статменте не вызывалось.
Does your second statement insert any identity column? No.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484454
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот же, как говорится, из мухи слона!!!

Почему так не написать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @s int

insert into test(about) values('master'); 

select @s=SCOPE_IDENTITY()

insert into test_detail(id, about_detail) values(@s, 'detail-1'); 
insert into test_detail(id, about_detail) values(@s, 'detail-2'); 

И никаких проблемм!
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484464
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПочему так не написать?
Я так своим первым постом и посоветовал. Но человек правды хочет.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484468
stakan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Гавриленко Сергей Алексеевич
Вопрос неверно поставлен:
Не так надо
Does your second statement insert any identity column? No
А вот как
Does your scope have any insert statements into an identity column на момент второго стейтмента? YES :-)
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484469
Edo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Edo
Гость
Проблемы нет. Просто из документации не следует, что любой insert скинет значение SCOPE в null, если даже insert идет в таблице без каких-либо полей с IDENTITY. Нет явного указания. Это и вызвало недоумение. А как использовать переменные для решения возникшей ситуации - я знаю. Всё равно спасибо за твой ответ.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484475
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишем мелкомягкому на прдмет кривой документации? :)
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484477
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы еще инстедный триггер создайте - прослезитесь.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484480
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во народ! Лень две строчки кода дописать!
Правду им подавай! А БОЛ читать внимательно не охота!
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #32484491
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПравду им подавай! А БОЛ читать внимательно не охота!
В общем-то, в боле действительно именно про scope_identity не написано, что If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL., хотя очень даже логично, что он null в данном случае возвращает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сброс SCOPE_IDENTITY
    #39860072
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичПишем мелкомягкому на пердмет кривой документации? :)а было бы неплохо... у меня наблюдается явное расхождение с документацией.
SCOPE_IDENTITY (Transact-SQL):
Returns the last identity value inserted into an identity column in the same scope. A scope is a module: a stored procedure, trigger, function, or batch . Therefore, if two statements are in the same stored procedure, function, or batch , they are in the same scope.
Код: plaintext
1.
2.
3.
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
	Oct 20 2015 15:36:27 
	Copyright (c) Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Код: sql
1.
2.
3.
4.
5.
6.
7.
--create table scope_identity_test( id int identity, q int)
go
select '1. must be Null:', scope_identity()
insert scope_identity_test select 1
go
select '2. must be Null:', scope_identity()
--drop table scope_identity_test

Наблюдаю, что scope_identity() сохраняет своё значение между батчами в одном коннекте. Как так?

P.S. ничего что я старый топик поднял? вопросы-то смежные.
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #39860119
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerros,

пробуйте читать не только первую строчку
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #39860241
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerrosГавриленко Сергей АлексеевичПишем мелкомягкому на пердмет кривой документации? :)а было бы неплохо... у меня наблюдается явное расхождение с документацией.
SCOPE_IDENTITY (Transact-SQL):
Returns the last identity value inserted into an identity column in the same scope. A scope is a module: a stored procedure, trigger, function, or batch . Therefore, if two statements are in the same stored procedure, function, or batch , they are in the same scope.
Код: plaintext
1.
2.
3.
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
	Oct 20 2015 15:36:27 
	Copyright (c) Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Код: sql
1.
2.
3.
4.
5.
6.
7.
--create table scope_identity_test( id int identity, q int)
go
select '1. must be Null:', scope_identity()
insert scope_identity_test select 1
go
select '2. must be Null:', scope_identity()
--drop table scope_identity_test

Наблюдаю, что scope_identity() сохраняет своё значение между батчами в одном коннекте. Как так?

P.S. ничего что я старый топик поднял? вопросы-то смежные.

Неплохо бы сделать, чтобы бал надпись не только "Между сообщениями интервал более 1 года.", но и более 5 или 10 или 15 лет
...
Рейтинг: 0 / 0
Сброс SCOPE_IDENTITY
    #39860361
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerrosГавриленко Сергей АлексеевичПишем мелкомягкому на пердмет кривой документации? :)а было бы неплохо... у меня наблюдается явное расхождение с документацией.
SCOPE_IDENTITY (Transact-SQL):
Returns the last identity value inserted into an identity column in the same scope. A scope is a module: a stored procedure, trigger, function, or batch . Therefore, if two statements are in the same stored procedure, function, or batch , they are in the same scope.
Код: plaintext
1.
2.
3.
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
	Oct 20 2015 15:36:27 
	Copyright (c) Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Код: sql
1.
2.
3.
4.
5.
6.
7.
--create table scope_identity_test( id int identity, q int)
go
select '1. must be Null:', scope_identity()
insert scope_identity_test select 1
go
select '2. must be Null:', scope_identity()
--drop table scope_identity_test

Наблюдаю, что scope_identity() сохраняет своё значение между батчами в одном коннекте. Как так?

P.S. ничего что я старый топик поднял? вопросы-то смежные.

Все уже давно перешли на output, а вы все мучаете 20 летний труп.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сброс SCOPE_IDENTITY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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