Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 как апдейтнуть поле identity?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
как апдейтнуть значения в поле identity?
24 авг 11, 17:59    [11173292]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Winnipuh,

никак
24 авг 11, 18:04    [11173327]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
SET IDENTITY_INSERT ON/OFF, вестимо.
24 авг 11, 18:11    [11173363]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
А! Вам апдейтить, а не инсертить - тады никак, да. Ну или делит и тут же инсерт тоже самое, но с иным значением identity.
24 авг 11, 18:14    [11173376]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Удалить и вставить с нужным, указав SET IDENTITY_INSERT ON.
24 авг 11, 18:15    [11173389]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
USE tempdb
GO

CREATE TABLE T1(col1 int identity(1,1), col2 char(1))
GO

INSERT T1(col2) VALUES('A'), ('B'), ('C')
GO

SELECT * FROM T1
GO

SET IDENTITY_INSERT T1 ON
GO

DELETE T1
OUTPUT deleted.col1 * 10, deleted.col2 INTO T1(col1, col2)
GO

SET IDENTITY_INSERT T1 OFF
GO

SELECT * FROM T1
GO

DROP TABLE T1
GO
24 авг 11, 21:03    [11174039]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
автоинкрементное поле в качестве первичного ключа - анахренизм времён досового парадокса, от которого одни проблемы.
24 авг 11, 23:51    [11174620]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Kyubee
автоинкрементное поле в качестве первичного ключа - анахренизм времён досового парадокса, от которого одни проблемы.


И я даже знаю какое алтернативное решение будет предложено.
Случайный GUID в качестве первичного ключа и он же кластерный. Угадал? Это сразу же решит все проблемы! :)
25 авг 11, 00:00    [11174653]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
Ну, в большинстве случаев да. Или у вас таблиц короче миллиарда записей не бывает?
25 авг 11, 00:05    [11174671]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Mind, не обязательно. Возможно Kyubee вообще противник суррогатных ключей и окромя естественных ничего не признает. Но гораздо более вероятен вариант, что фраза сказана неподумавши, под влиянием использования различных ORM.
25 авг 11, 00:08    [11174680]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Kyubee
от которого одни проблемы


Начали хорошо. Однако не суетитесь - давайте пункт первый из этого, по видимому, очень длинного списка (проблем).
25 авг 11, 00:13    [11174697]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
Кстати, а чем лучше кластерный автоинкрементный чем случайный? Что, настолько велика вероятность, что записи подряд вставленные - подряд же и понадобятся? Не "под влиянием" ли разработки однопользовательских систем такое мнение?
25 авг 11, 00:18    [11174708]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
SamMan,

пункт 1. Новое id надо выковыривать с сервера.
По-моему, лишнее действие с сервером съедает всю экономию, о которой так беспокоятся байтолюбы.
25 авг 11, 00:20    [11174719]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Kyubee
SamMan,

пункт 1. Новое id надо выковыривать с сервера.
По-моему, лишнее действие с сервером съедает всю экономию, о которой так беспокоятся байтолюбы.

Куда выковыривать? Вы об чем вообще?
25 авг 11, 00:30    [11174754]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
kDnZP,

ну формирую я документ в клиентском приложении. Документ состоит из множества взаимосвязанных записей. Сформировав, хочу одним движением сохранить. И тут мне понадобилось прописать id свежесозданной записи в какое-нибудь ссылочное поле...
25 авг 11, 00:40    [11174776]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Kyubee, вот вам пример на осмысление. Постарайтесь внимательно обдумать его, чтобы понять - GUID нужен именно там, где он нужен. Это далеко не панацея и не решение всех проблем. Так что ваша фраза:
автор
автоинкрементное поле в качестве первичного ключа - анахренизм времён досового парадокса, от которого одни проблемы.

несколько поспешна)))

DECLARE @tbl1 TABLE(id INT IDENTITY, f INT)
DECLARE @tbl2 TABLE(gid UNIQUEIDENTIFIER DEFAULT(NEWID()), f INT)

INSERT INTO @tbl1(f)
SELECT 1 UNION ALL SELECT 5 UNION ALL SELECT 10

INSERT INTO @tbl2(f)
SELECT 1 UNION ALL SELECT 5 UNION ALL SELECT 10

SELECT * FROM @tbl1
SELECT * FROM @tbl2

SELECT * FROM @tbl1 WHERE id=2
--SELECT * FROM @tbl1 WHERE gid=??????????

SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn FROM @tbl1
SELECT *, ROW_NUMBER() OVER (ORDER BY gid) rn FROM @tbl2
25 авг 11, 00:43    [11174780]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Kyubee
kDnZP,

ну формирую я документ в клиентском приложении. Документ состоит из множества взаимосвязанных записей. Сформировав, хочу одним движением сохранить. И тут мне понадобилось прописать id свежесозданной записи в какое-нибудь ссылочное поле...

и в чём проблема? ты же знаешь как это сделать руками - просто автоматизируй.
25 авг 11, 00:44    [11174784]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Kyubee
kDnZP,

ну формирую я документ в клиентском приложении. Документ состоит из множества взаимосвязанных записей. Сформировав, хочу одним движением сохранить. И тут мне понадобилось прописать id свежесозданной записи в какое-нибудь ссылочное поле...

Ну кто бы сомневался. Вот оно, пагубное влияние ORM. Делать все на клиенте, а потом скопом слать на сервер.
Вы про хранимые процедуры вообще в курсе? Про @@IDENTITY, SCOPE_IDENTITY(), про параметры OUT?
25 авг 11, 00:51    [11174802]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
kDnZP,

это пример чего? какую цель пытались достичь?

Зайцев Фёдор,

зачем мне тратить время на эти совершенно неинтересные проблемы, за которые никто не заплатит? Я создаю id на клиенте (клиентом к sql может выступать вебсервис), и использую его (вставляю в ссылки), зная, что он не поменяется.
25 авг 11, 00:52    [11174807]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
kDnZP
Вот оно, пагубное влияние ORM. Делать все на клиенте, а потом скопом слать на сервер.

как будто это что-то плохое. Вот оно, пагубное влияние лени и нежелания уметь в ООП.
kDnZP
Вы про хранимые процедуры вообще в курсе? Про @@IDENTITY, SCOPE_IDENTITY(), про параметры OUT?

в курсе. Предлагаете всю логику писать на древнем скриптовом языке t-sql?
25 авг 11, 00:57    [11174817]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Kyubee
пункт 1. Новое id надо выковыривать с сервера


Вон оно че, Михалыч...

Kyubee
Я создаю id на клиенте (клиентом к sql может выступать вебсервис), и использую его (вставляю в ссылки), зная, что он не поменяется.


Ага, а теперь у вас клиентов - 500. И все одновременно вставляют. В одну и ту же таблицу. Создавайте id вот в такой ситуации.
Когда решите эту задачу после 500 добавьте слово "тысяч" (и это, замечу, все еще будет сценарий реальной работы для SQL Server) и продолжайте вставлять id с этого полумиллиона клиентов. И, разумеется, ключевое слово все то же - делайте это одномоментно.

Так что там у нас под пунктом 2?
25 авг 11, 01:06    [11174841]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Kyubee
kDnZP
Вот оно, пагубное влияние ORM. Делать все на клиенте, а потом скопом слать на сервер.

как будто это что-то плохое. Вот оно, пагубное влияние лени и нежелания уметь в ООП.
kDnZP
Вы про хранимые процедуры вообще в курсе? Про @@IDENTITY, SCOPE_IDENTITY(), про параметры OUT?

в курсе. Предлагаете всю логику писать на древнем скриптовом языке t-sql?

Все ясно. Нет, я вам ничего не предлагаю. ORM, CLR, курсоры - ваше все. И пофиг на производительность. СУБД использовать чисто как хранилище, ибо нефиг. Только одно но есть - вы неправильную ветку выбрали для продвижения своих идей. В ветке по ORM и ООП вас встретят с распростертыми объятиями.

* Не прощаюсь, вы еще вернетесь, когда вам прийдется начать изучать древний скриптовой t-sql, чтобы производительность вашего решения была не совсем уж печальной))).

** А если серьезно - плохо, что у вас нет понимания что и где использовать. Какая технология оправдана в каком случае. Где выигрыши, а где проигрыш. Но если желание будет - разберетесь, только не спешите бросаться лозунгами, пока понимание не появится ;).
25 авг 11, 01:07    [11174844]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Kyubee
автоинкрементное поле в качестве первичного ключа - анахренизм времён досового парадокса, от которого одни проблемы

Kyubee
Предлагаете всю логику писать на древнем скриптовом языке t-sql?


Тролли и холиварщики в этом разделе долго не живут. Рекомендую свои высказывания подреплять аргументами. Во избежание, так сказать.
25 авг 11, 01:24    [11174872]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
Kyubee
Member

Откуда:
Сообщений: 125
SamMan
вставлять id с этого полумиллиона клиентов. И, разумеется, ключевое слово все то же - делайте это одномоментно

В моём сценарии - вставка в неподряд идущие страницы, в вашем - отослать назад полмиллиона id (а клиентам, соответственно, подождать). Что тяжелее, ещё вопрос. Я выкручиваюсь созданием кластерного индекса по автоинкрементному полю (не pk, на клиента не вычитывается). Вы?

SamMan
Так что там у нас под пунктом 2?

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

kDnZP, Гавриленко Сергей Алексеевич
ok, раз местным их жизненный опыт подсказывает что скорость работы "главнее" скорости разработки, вернусь с вопросами оптимизации производительности...
25 авг 11, 01:57    [11174939]     Ответить | Цитировать Сообщить модератору
 Re: как апдейтнуть поле identity?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Kyubee, вы описыаете какую-то сферическую задачу в вакууме. Мне вообще не понятно, зачем на клиента слать эти полмиллиона id? Мне видится правильный подход - возвращать на клиента ровно столько, сколько ему нужно. Не более. Но видимо мы с вами говорим на разных языках... И мне совершенно не ясно, как использование гуидов увеличивает скорость разработки.
25 авг 11, 03:02    [11174981]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить