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

Откуда: Опорный край державы
Сообщений: 34
Добрый день. Подскажите:

Есть Самописаня оболочка для ведения БД, работает на MS SQL EXPRESS R2 2008. Доступа к исходному коду нет.

В разделе отчеты Пункты идут в порядке создания без возможности сортировки.

Посмотрев устройство БД я понял что на каждый отчет заводится в служебной таблице строка ID(PK int), text(varchar) ... etc.

В общем отчеты нумеруются по порядку по полю РК.

Как можно поменять РК местами, не пересоздавая таблицу?
30 авг 18, 12:57    [21658745]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
j-ester
Добрый день. Подскажите:

Есть Самописаня оболочка для ведения БД, работает на MS SQL EXPRESS R2 2008. Доступа к исходному коду нет.

В разделе отчеты Пункты идут в порядке создания без возможности сортировки.

Посмотрев устройство БД я понял что на каждый отчет заводится в служебной таблице строка ID(PK int), text(varchar) ... etc.

В общем отчеты нумеруются по порядку по полю РК.

Как можно поменять РК местами, не пересоздавая таблицу?


для начала посмотрите в профайлере, какие запросы идут к базе, будет виднее, где и что исправлять
30 авг 18, 13:00    [21658751]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Освоить команду update и поменять id на нужные зхначения. Если id -- это identity, то удалить запись со ненужным значением id и вставить ее с нужным значением, используя identity_insert.
30 авг 18, 13:01    [21658754]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2374
j-ester,

добавить отдельное поле, и нумеровать в нем так, как нужно
30 авг 18, 13:17    [21658783]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
1) Я смотрел в профайлере - идет обращение и вывод полей, соответсвующее номеру в поле ID (PK, autoinkrement)

2) Освоить команду update и поменять id на нужные зхначения. Если id -- это identity, то удалить запись со ненужным значением id и вставить ее с нужным значением, используя identity_insert.

Подскажите точнее, у меня не получилось поменять , так как есть ограничение РК - это первичный ключ, хотя я не уверен что он где то привязн - в таблице ТОЛЬКО элементы для отображения в По, они в запросах не используются

3) добавить отдельное поле, и нумеровать в нем так, как нужно

Есть Самописаня оболочка для ведения БД, работает на MS SQL EXPRESS R2 2008. Доступа к исходному коду нет.
30 авг 18, 13:48    [21658831]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
Гавриленко Сергей Алексеевич,

Поясню - таблица вида elid (PK, inkrement), parent_elid(NOT NULL), nama (varchar "Название пункта меню в отчетах"), иконка (или что такое).

В ПО отчеты выводятся в соответсвии с сортировкой по полю ID (PK).

Как я вижу - связий у этого ключа нет, он нужен только для вывода пунктов.

МНЕ НУЖНО ПОМЕНЯТЬ ID, допустим ID 20 и ID 40 поменять местами. ЛЮБЫМ способом, можно изменением на другие свободные числа. Не важно.


Запрос например увеличиваем последний элемент на 2:
update [ias_hier]
set elid = 100490
where elid = 100488

Сообщение 8102, уровень 16, состояние 1, строка 1
Не удалось изменить столбец идентификаторов "elid".

Как мне поменять значение поля PK со свойством autoinkrement ,,
30 авг 18, 13:57    [21658851]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Если есть форинкеи, то придется их сначала удалить/отключить, потом поменять данные во всех связанных таблицах, потом вернуть констрейнты обратно.

Вы уверены, что вам настолько нужно поменять порядок отчетов?
30 авг 18, 13:58    [21658852]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
вставить строку 100490 из записи 100488, потом удалить строку 100488

вставлять с использованием:
SET IDENTITY_INSERT YourTable ON

-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to prevoius track
SET IDENTITY_INSERT YourTable OFF
30 авг 18, 14:00    [21658859]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
aleks222
Member

Откуда:
Сообщений: 847
Konst_One
вставить строку 100490 из записи 100488, потом удалить строку 100488

вставлять с использованием:
SET IDENTITY_INSERT YourTable ON

-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to prevoius track
SET IDENTITY_INSERT YourTable OFF


Если у тредстартера все так незатейливо, то не проще ли update-ом обменять содержимое строк.
И не париться с SET IDENTITY_INSERT.
30 авг 18, 14:02    [21658865]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
j-ester
1) Я смотрел в профайлере - идет обращение и вывод полей, соответсвующее номеру в поле ID (PK, autoinkrement)


какая?
30 авг 18, 14:06    [21658872]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
Гавриленко Сергей Алексеевич,

Мне нет - руководству ДА. но спасибо - Ваш совет помог. SET IDENTITY_INSERT dbo.Tool ON; - то что нужно
30 авг 18, 14:10    [21658882]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
aleks222,

UPDATE не работает, вывод писал выше.
30 авг 18, 14:11    [21658883]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
Konst_One,

Спасибо, то что нужно.
30 авг 18, 14:11    [21658884]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
вот весело будет если FK не сделали но ссылаются
30 авг 18, 14:13    [21658885]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
aleks222
Member

Откуда:
Сообщений: 847
j-ester
aleks222,

UPDATE не работает, вывод писал выше.


Ну, у вас то, понятно, не работает.
Работать надо головой.
30 авг 18, 14:14    [21658886]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
aleks222
Member

Откуда:
Сообщений: 847
Т.е. менять не ELID строк, а содержимое.

Ибо от перемены мест слагаемых ничо не меняется.
30 авг 18, 14:16    [21658889]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
aleks222,

А вот вы знаете - Вы же правы !! Почему то я об этом не подумал......
30 авг 18, 14:25    [21658904]     Ответить | Цитировать Сообщить модератору
 Re: Как поменять местами РК  [new]
j-ester
Member

Откуда: Опорный край державы
Сообщений: 34
TaPaK,

Там в скомпилированном коде сделано часть ПО, часть в БД хранит, к тому что в БД я имею доступ и правлю, к тому что в бинарнике - нет.
30 авг 18, 14:26    [21658906]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить