1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

MSSQL - Identity

Тема в разделе "Программирование", создана пользователем Mikle, 17.12.07.

  1. Mikle

    Mikle Активный участник

    1.318
    0
    Есть табличка с полем, допустим ID1 Identity.
    Возможно ли как-тоскриптом снять свойство Identity с поля?
    Посмотрел запрос интерпрайза и ужоснулси - создается темповая таблица по стркутуре точно такая же, но требуемое поле уже без Identity, в нее копируются все данные, затем сносится базовая таблица, создается заново (без идентити) и туда копируются данные из темповой... а темповая соответственно дропается... ЖУТЬ!
    Есть такое ощущение, что можно как-то через системные таблицы (типа syscolumns) снять признак, но как? Кто сталкивался, помогите!

    З.Ы.: только не надо начинать песню про некорректно спроектированные базы и т.п. :)
     
  2. AlTk

    AlTk Читатель

    10.699
    0
    Mikle,
    "... запрос интерпрайза и ужоснулси ..."
    а что такого? не Вы же все это будете делать.

    ПС.
    "... только не надо начинать песню про некорректно спроектированные базы и т.п. ..."
    это хорошо, когда самокритика присутствует :)
     
  3. Mikle

    Mikle Активный участник

    1.318
    0
    Так ведь требуется скрипт, а не тыкнуть галочку в интерпрайзе... А переносить то что сделал интерпрайз жутко не удобно, так как еще надо дропать и потом воссоздавать все связи и ссылки м/у таблицами...
     
  4. AlTk

    AlTk Читатель

    10.699
    0
    Mikle,
    в энтерпрайзе есть возможность все действия, которые Вы выполнили через галочки записать в скрипт. в результате у вас готовый скрипт, который работает с учетом всех "констрэйнтов" и других условий.
     
  5. Mikle

    Mikle Активный участник

    1.318
    0
    Это я уже заметил. Спасибо!
    Но вот просто вызвал недоумение тот факт, что снятие обычного признака с поля требует такой довольно сложной последовательности действий... Интересно а если данных будет в таблице гигабайты, сколько будут выполняться скрипты?...
    Кстати ни у кого нет описания таблицы syscolumns?
     
  6. AlTk

    AlTk Читатель

    10.699
    0
    Mikle,
    для этого есть всякие опции типа не использовать журналы транзакций, или использовать bulk copy.

    ПС. "... Кстати ни у кого нет описания таблицы syscolumns? ..."
    боже мой, боже мой. срочно в школу за книжками.

    а вообще все это описано в справке к MS SQL Server и MSDN, как в онлайновой, так и в дисковой версиях.
    да и вообще, прежде чем волпросы спрашивать, хорошо бы теорию почитать.
     
  7. Bob

    Bob Активный

    21.804
    0
    Песец какой-то!:haha:
     
  8. jek

    jek Активный участник

    5.733
    0
    Я ведь всего то прошу немного изменить характеристики фундамента, а вы мне говорите, что весь дом придется снести и заново построить.
     
  9. Mikle

    Mikle Активный участник

    1.318
    0
    AlTk,
    в он-лайне я не смог найти назначения всех полей. Если есть конкретные ссылки буду премного благодарен... А на счет книжек и школы - зачастую их пишут люди, которые не сталкивались с половиной возможных проблем...
    Тем более я думал форумы для того и есть, чтобы решать вопросы не перерывая горы литературы...

    jek,
    немного аналогия не корректна... Я не вижу глобальной проблемы в убирании свойства автоинкримента и почему это должно происходить подобным образом я, честно не могу понять...

    2All: просьба тему не засорять сообщениями про книжки, школу, фундамент... Если есть какие-то реальные знания по теме - буду сильно благодарен, если ими поделитесь...
     
  10. AlTk

    AlTk Читатель

    10.699
    0
  11. Mikle

    Mikle Активный участник

    1.318
    0


    Вот и я про тоже для ряда полей идет приписка типа:
    "autoval varbinary(255) For internal use only"

    а мне очень интересно, что туда и в каких случаях пишется, ибо есть большое подозрение, что именно это поле отвечает за автоинкримент (он же Identity) в поле таблицы...
     
  12. pegas

    pegas Участник

    311
    0
    SET IDENTITY_INSERT ON перед вставкой - эмуляция снятия идентити :)
     
  13. Mikle

    Mikle Активный участник

    1.318
    0
    pegas,
    это не помогает. Это позволяет вставить значение, но не проапдейтить уже существующее... А задача именно в апдейте существующих идешников...