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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы уверены, что вам настолько нужно поменять порядок отчетов?
...
Рейтинг: 0 / 0
30.08.2018, 14:00
    #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
30.08.2018, 14:02
    #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
30.08.2018, 14:06
    #39695554
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поменять местами РК
j-ester1) Я смотрел в профайлере - идет обращение и вывод полей, соответсвующее номеру в поле ID (PK, autoinkrement)


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

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

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

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

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

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

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

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

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


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