powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как поменять местами РК
18 сообщений из 18, страница 1 из 1
Как поменять местами РК
    #39695486
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Подскажите:

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

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

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

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

Как можно поменять РК местами, не пересоздавая таблицу?
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695488
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j-esterДобрый день. Подскажите:

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

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

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

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

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

для начала посмотрите в профайлере, какие запросы идут к базе, будет виднее, где и что исправлять
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695490
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Освоить команду update и поменять id на нужные зхначения. Если id -- это identity, то удалить запись со ненужным значением id и вставить ее с нужным значением, используя identity_insert.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695503
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j-ester,

добавить отдельное поле, и нумеровать в нем так, как нужно
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695529
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Я смотрел в профайлере - идет обращение и вывод полей, соответсвующее номеру в поле ID (PK, autoinkrement)

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

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

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

Есть Самописаня оболочка для ведения БД, работает на MS SQL EXPRESS R2 2008. Доступа к исходному коду нет.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695537
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Поясню - таблица вида 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 ,,
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695538
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть форинкеи, то придется их сначала удалить/отключить, потом поменять данные во всех связанных таблицах, потом вернуть констрейнты обратно.

Вы уверены, что вам настолько нужно поменять порядок отчетов?
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695544
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вставить строку 100490 из записи 100488, потом удалить строку 100488

вставлять с использованием:
Код: sql
1.
SET IDENTITY_INSERT YourTable ON


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- 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
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695549
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneвставить строку 100490 из записи 100488, потом удалить строку 100488

вставлять с использованием:
Код: sql
1.
SET IDENTITY_INSERT YourTable ON


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- 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.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695554
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j-ester1) Я смотрел в профайлере - идет обращение и вывод полей, соответсвующее номеру в поле ID (PK, autoinkrement)


какая?
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695560
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Мне нет - руководству ДА. но спасибо - Ваш совет помог. SET IDENTITY_INSERT dbo.Tool ON; - то что нужно
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695561
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

UPDATE не работает, вывод писал выше.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695562
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Спасибо, то что нужно.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695563
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот весело будет если FK не сделали но ссылаются
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695564
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j-esteraleks222,

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

Ну, у вас то, понятно, не работает.
Работать надо головой.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695567
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. менять не ELID строк, а содержимое.

Ибо от перемены мест слагаемых ничо не меняется.
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695573
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

А вот вы знаете - Вы же правы !! Почему то я об этом не подумал......
...
Рейтинг: 0 / 0
Как поменять местами РК
    #39695575
j-ester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Там в скомпилированном коде сделано часть ПО, часть в БД хранит, к тому что в БД я имею доступ и правлю, к тому что в бинарнике - нет.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как поменять местами РК
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]