4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
1

Оператор @@IDENTITY

24.09.2016, 09:39. Показов 1405. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Буду очень признателен если поможете разобраться с заданием.
Задание:
Таблица T1(ID int identity(1,1),DocID int,SumDoc float) - заголовок документа
Таблица T2(ID int,Pos int,PosTime datetime,SumPos float) - детали документа

таблицы T1 и T2 не содержат значений
связь между таблицами T1 и T2 по полю ID

Заполняем таблицу вот таким образом:
T-SQL
1
2
3
4
insert into T1(DocID, SumDoc) values(1,11.1)
insert into T2(ID,Pos,PosTime,SumPos) values(@@IDENTITY,1,getdate(),2.1)
insert into T2(ID,Pos,PosTime,SumPos) values(@@IDENTITY,2,getdate(),3.4)
insert into T2(ID,Pos,PosTime,SumPos) values(@@IDENTITY,3,getdate(),5.6)

1) Все бы ничего - все вроде элементарно но когда создаю и заполняю таблицы, Id второй таблицы у меня null - ну а из-за этого все остальные проблемы вылазят.((( Разве не должно по умолчанию быть 1 с шагом 1.

2) Вот тут не получается: написать скрипт, который выведет все позиции(Pos) из детальной части в строку через запятую для заданного ID документа.
Результат для документа должен быть 1,2,3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2016, 09:39
Ответы с готовыми решениями:

тонкости @@IDENTITY
допустим есть некая таблица и хранимая процедура create table t1( F_ID int not null...

SCOPE_IDENTITY(),@@IDENTITY
Доброго времени суток, есть проблема автоматической вставки PK_ID из столбца А в FK_ID столбца Б...

Проблема с @@identity
Делаю БД для сети комп магазинов. Создал таблицы, связал. Попробовав занести данные, столкнулся со...

Identity seed
После импорта бд на локальный сервер пропал (не сбросился а именно пропал) identity_seed у таблицы....

8
1115 / 760 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
24.09.2016, 09:44 2
Цитата Сообщение от Tiger Посмотреть сообщение
когда создаю и заполняю таблицы, Id второй таблицы у меня null
Во второй таблице же нет свойства IDENTITY.
Что удивительного?
0
4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
24.09.2016, 10:19  [ТС] 3
Просто я понял выражение: "связь между таблицами T1 и T2 по полю ID" что в T2 Id тоже как первичный ключ и уже не обязательно прописывать identity(1,1). Не хватает опыта поэтому прошу уточнить и помочь.
Тоесть я все правильно понял? Id во второй таблице null, т.к предшествующего значения перед @@IDENTITY нет.
А как тогда сформировать этот запрос чтобы результат для документа был 1,2,3?
0
1115 / 760 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
24.09.2016, 13:06 4
При чём здесь @@IDENTITY ??
Это просто такая системная функция, возвращающая последнее вставленное значение в какое-то поле со свойством IDENTITY в пределах всей базы данных.
Значение присваивается и инкреминируется автоматически, только если поле таблицы имеет свойство IDENTITY.
Что мешает открыть справку и прочитать об этом?
0
4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
25.09.2016, 09:46  [ТС] 5
Абсолютно ничего не мешает, и даже больше, неоднократно перечитывал и все равно не понимаю.
Может сможете подсказать литературу с хорошим примером по этому вопросу.
По отдельности нет ничего сложного в этом примере - но в целом он меня ставит в ступор, именно по этой причине обратился на форуме с помощью. Больше проблема что я тупо не могу понять задания - когда ID значения - по нему получается null.
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
25.09.2016, 11:38 6
Цитата Сообщение от Tiger Посмотреть сообщение
Больше проблема что я тупо не могу понять задания - когда ID значения - по нему получается null.
Функция @@identity возвращает последнее сгенерированное значение identity в БД. Не в какой-то определенной таблице, а в БД
Если же последняя операция вставки была в таблицу без identity-столбца, @@identity вернет null. Об этом в документации написано открытым текстом.

Поэтому, в вашем случае в первой инструкции insert into T2 ... values(@@IDENTITY ...), функция @@identity вернет какое-то значение, а в остальных двух вернет null.
Перепишите так
T-SQL
1
2
3
4
5
6
7
insert into T1(DocID, SumDoc) values(1,11.1);
 
declare @id = @@identity;
 
insert into T2(ID,Pos,PosTime,SumPos) values(@id,1,getdate(),2.1);
insert into T2(ID,Pos,PosTime,SumPos) values(@id,2,getdate(),3.4);
insert into T2(ID,Pos,PosTime,SumPos) values(@id,3,getdate(),5.6);
1
4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
25.09.2016, 15:53  [ТС] 7
Вот теперь понял! Спасибо! А по второму вопросу не подскажете, т.к я условия не могу задания менять..: скрипт, который выведет все позиции(Pos) из детальной части в строку через запятую для заданного ID документа.
Результат для документа должен быть 1,2,3. Я не смогу написать? - правильно? Или я опять что-то не понимаю?
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
25.09.2016, 16:35 8
Цитата Сообщение от Tiger Посмотреть сообщение
скрипт, который выведет все позиции(Pos) из детальной части в строку через запятую для заданного ID документа.
https://habrahabr.ru/post/200120/
1
4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
25.09.2016, 17:45  [ТС] 9
Всем спасибо! Во всем разобрался!
0
25.09.2016, 17:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2016, 17:45
Помогаю со студенческими работами здесь

@@IDENTITY данной таблицы
Имеется таблица MyTable1, которая содержит триггер: CREATE TRIGGER trig_MyTable1 ON dbo.MyTable1...

Последовательная нумеровка identity
Помогите сделать последовательную нумеровку таблицы столбца "idseller", в гугле очень мало инфы про...

Вернуть значение столбца identity
Здравствуйте. Вот стоит у меня задача сделать регистрацию пользователя. В базу добавляются...

Корректное создание таблиц с IDENTITY
Здравствуйте, уважаемые форумчане! Доброго вам времени суток! =) Возник следующий вопрос при...

Таблица MySql поле identity
Всем привет! Я только начинаю изучать SQL и тут такая проблемка. 1) Таблицу создала, типы данных...

ALTER COLUMN id ADD IDENTITY (1, 1)
Пытаюсь добавить IDENTITY к сущ. полю в таблице, ругается 'Incorrect syntax near the keyword...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru