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

Откуда: Київ
Сообщений: 10428
MSSQL2000

есть таблица

create table test
(
id int not null identity,
name nvarchar(32CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
)

по некоторым причинам нужно убрать идентити из id.
Но доступа к клиентсокму приложению нет, следовательно оттуда идут запрсоы на вставку типа

insert into test(name) values('name101')


как извернуться в данном случае?
триггер for insert не пропускает NULL, чтобы можно было в нем что-то изменить...
29 окт 09, 15:26    [7857056]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
not null снимайте еще, pk убирайте.
29 окт 09, 15:27    [7857079]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гавриленко Сергей Алексеевич
not null снимайте еще, pk убирайте.


убрал, и добавил еще поле которе пкб и идентити.
Как заполнить значение id на вставке?
29 окт 09, 15:35    [7857162]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Winnipuh
Гавриленко Сергей Алексеевич
not null снимайте еще, pk убирайте.


убрал, и добавил еще поле которе пкб и идентити.
Как заполнить значение id на вставке?
Триггер, instead of триггер.
29 окт 09, 15:39    [7857196]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гавриленко Сергей Алексеевич
Winnipuh
Гавриленко Сергей Алексеевич
not null снимайте еще, pk убирайте.


убрал, и добавил еще поле которе пкб и идентити.
Как заполнить значение id на вставке?
Триггер, instead of триггер.


но откуда его брать лучше? max(id)+1 ?
29 окт 09, 15:43    [7857233]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Джонни Кейдж
Member

Откуда: стольный град Киев
Сообщений: 31
SET IDENTITY_INSERT Test ON 
INSERT INTO Test (ID, Name) VALUES (1, 'Name101')
SET IDENTITY_INSERT Test OFF
29 окт 09, 15:46    [7857255]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
msLex
Member

Откуда:
Сообщений: 7887
Winnipuh
Гавриленко Сергей Алексеевич
Winnipuh
Гавриленко Сергей Алексеевич
not null снимайте еще, pk убирайте.


убрал, и добавил еще поле которе пкб и идентити.
Как заполнить значение id на вставке?
Триггер, instead of триггер.


но откуда его брать лучше? max(id)+1 ?


например, из вашего нового поля с identity
29 окт 09, 15:49    [7857278]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Джонни Кейдж
SET IDENTITY_INSERT Test ON 
INSERT INTO Test (ID, Name) VALUES (1, 'Name101')
SET IDENTITY_INSERT Test OFF


это не пройдет, доступа к клиентскому коду нет.
29 окт 09, 15:51    [7857303]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Я вот только не понял, зачем надо было сначала identity убирать, а потом геморроиться с его имитацией/заменой.
29 окт 09, 15:51    [7857304]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
msLex
Member

Откуда:
Сообщений: 7887
Гавриленко Сергей Алексеевич
Я вот только не понял, зачем надо было сначала identity убирать, а потом геморроиться с его имитацией/заменой.


Ну например, часть клиентского когда при вставки указывает ID, а часть нет, и его, кривой клиентский код, изменить невозможно.
29 окт 09, 15:53    [7857320]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гавриленко Сергей Алексеевич
Я вот только не понял, зачем надо было сначала identity убирать, а потом геморроиться с его имитацией/заменой.


причина: юзер хочет иметь возможность вставлять в эту таблицу конкретные занчения id, Т.е. у него есть архивная таблица с такой же структурой, и время отвремени она тащит записи из неё обратно. и получается расхождение идов.
Там таблица чуть сложнее

id int
...
parent_id int

2-х уровневое дерево, и при вставке в главную таблицу иды меняются , а перанты ессесно нет...
ну вот..
29 окт 09, 15:56    [7857339]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
msLex
Winnipuh
Гавриленко Сергей Алексеевич
Winnipuh
Гавриленко Сергей Алексеевич
not null снимайте еще, pk убирайте.


убрал, и добавил еще поле которе пкб и идентити.
Как заполнить значение id на вставке?
Триггер, instead of триггер.


но откуда его брать лучше? max(id)+1 ?


например, из вашего нового поля с identity


шайтан!

спасибо!
29 окт 09, 15:57    [7857348]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
msLex
Гавриленко Сергей Алексеевич
Я вот только не понял, зачем надо было сначала identity убирать, а потом геморроиться с его имитацией/заменой.


Ну например, часть клиентского когда при вставки указывает ID, а часть нет, и его, кривой клиентский код, изменить невозможно.
Как же такой клиент раньше работал?!
29 окт 09, 15:58    [7857356]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
как скриптом снять идентити и пк с этой таблицы?

create table test
(
id int not null identity,
name nvarchar(32PRIMARY KEY CLUSTERED ([id])
)
29 окт 09, 15:59    [7857366]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
iap
msLex
Гавриленко Сергей Алексеевич
Я вот только не понял, зачем надо было сначала identity убирать, а потом геморроиться с его имитацией/заменой.


Ну например, часть клиентского когда при вставки указывает ID, а часть нет, и его, кривой клиентский код, изменить невозможно.
Как же такой клиент раньше работал?!


а вот так , это отдельная тема... на вопрос как оно у вас работало - ответ "а никак!"

индусы хитрые, они сделали архивную талбицу с точно такой же структурой, но не поставили идентити на ид
29 окт 09, 16:01    [7857387]     Ответить | Цитировать Сообщить модератору
 Re: IDENTITY - как разрулить такую проблему?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Winnipuh
как скриптом снять идентити и пк с этой таблицы?

create table test
(
id int not null identity,
name nvarchar(32PRIMARY KEY CLUSTERED ([id])
)
  • Добавить колонку.
  • Сохранить скрипты создания всех FOREIGN KEYs, ссылающихся на PK таблицы
  • Удалить все FOREIGN KEYs, ссылающиеся на PK таблицы
  • Удалить PK таблицы
  • Скопировать данные из колонки IDENTITY в добавленную колонку
  • Удалить колонку IDENTITY
  • Переименовать новую колонку на имя удалённой
  • Восстановить PK
  • Восстановить все FK
    Как-то так...
  • 29 окт 09, 16:06    [7857432]     Ответить | Цитировать Сообщить модератору
     Re: IDENTITY - как разрулить такую проблему?  [new]
    Winnipuh
    Member [заблокирован]

    Откуда: Київ
    Сообщений: 10428
    как удалить ПК?
    так не проходит, видимо помтуо что это 2000 сервер.

    ALTER TABLE test  DROP Constraint PK_test

    но как?
    29 окт 09, 16:40    [7857741]     Ответить | Цитировать Сообщить модератору
     Re: IDENTITY - как разрулить такую проблему?  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 36808
    "Не проходит" - это сообщение об ошибке?
    29 окт 09, 16:41    [7857747]     Ответить | Цитировать Сообщить модератору
     Re: IDENTITY - как разрулить такую проблему?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 46975
    Есть, небось, FK, ссылающиеся на этот PK
    29 окт 09, 17:06    [7857949]     Ответить | Цитировать Сообщить модератору
     Re: IDENTITY - как разрулить такую проблему?  [new]
    Winnipuh
    Member [заблокирован]

    Откуда: Київ
    Сообщений: 10428
    Гавриленко Сергей Алексеевич
    "Не проходит" - это сообщение об ошибке?


    есть constraint с диким именем, решил так

    declare @name varchar(128)
    declare @stmt varchar(128)
    select @name=name from sysobjects where xtype=N'PK' and parent_obj = 
    (select id from sysobjects where xtype=N'U' and name = N'test2')
    if(@name is not null and len(@name)>0)
    begin
    	set @stmt = 'alter table test2 drop constraint '+@name
    	print @stmt;
    	exec(@stmt)
    end
    29 окт 09, 17:15    [7858034]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить