2014-12-04 3 views
1
id name order 
1 a  102 
2 b  103 
3 c  104 
4 d  105 
5 e  106 
6 f  107 
7 g  108 
8 h  109 
9 i  110 

выше, показывая, как «заказ по заказу ASC» Идентификатор столбца является первичным ключом, автоматическое приращение на 1 имя столбца является Колум порядок VARCHAR является ИНТSql сервер увеличивающимся идентификатор вручную

I хотите обновить номера заказов из указанной строки. Например, , я хочу переместить id 9 в первый порядок (102) и хочу изменить номера заказов для всех других идентификаторов для него.

есть ли способ программно работать в ms sql?

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

EDIT: извините, это мой первый раз, я хотел бы рассказать больше.

Во-первых, для удаления первичного ключа я не хочу менять первичные ключи. Я просто хочу, чтобы изменить свои идентификаторы порядка, в приведенном выше примере, я хочу изменить «порядок» от «ID = 9» до 102, то другие должно быть следование от 103,104,105 и т.д ..

РЕЗУЛЬТАТ будет ...

id name order 
9 i  **102** 
1 a  **103** 
2 b  **104** 
3 c  **105** 
4 d  **106** 
5 e  **107** 
6 f  **108** 
7 g  **109** 
8 h  **110** 
+0

Просьба EXA mple о том, как результат должен быть после – Steve

+0

Вопрос неясен, и я не совсем уверен, что они после. Однако, как правило, очень плохой дизайн - это обновление ключей. –

+0

Я отредактировал мой вопрос ... – MehmetB

ответ

3

Я думаю, вы не должны путаться с идентификатором (первичный ключ) строки. Это должно быть непреложным

Если вам нужен параметр сортировки достаточно, чтобы добавить новый столбец

ALTER TABLE dbo.MYTABLENAME ADD 
    Sort int NOT NULL CONSTRAINT DF_tmp_Sort DEFAULT 0 
GO 

так что вы можете сортировать по нему и изменить его, как вам нравится

Update после вопроса редактирования :

нормально теперь я понимаю ваше требование:

SELECT * 
FROM dbo.MYTABLENAME 
ORDER BY CASE WHEN ID = 9 THEN 0 
       ELSE ID END ASC 

дальше (надеюсь последний) обновление

вам просто нужно 2 простых UPDATE:

UPDATE dbo.MYTABLENAME SET order=order+1 WHERE order>=102; 
UPDATE dbo.MYTABLENAME SET order=102 WHERE id=9; 
+0

спасибо @giammin, я редактировал вопрос, чтобы объяснить больше, пожалуйста, проверьте еще раз. – MehmetB

+0

@ MehmetBuluş Я думаю, что получаю то, что вы просите: прочитайте мое редактирование – giammin

+0

еще раз спасибо, но вы меня не понимаете, я не хочу выбирать, я хочу «обновить» все, как таблицу результатов. – MehmetB

2

перетасовать данные, так что 9 начинается на 102 и все, что приходит после того, как 102 изменяется на теперь начинаются в 103, используйте:

UPDATE SomeTable SET [Order] = [Order] + 1 WHERE [Order] >= 102; 
UPDATE SomeTable SET [Order] = 102 WHERE ID = 9 

Где SomeTable ваше имя таблицы

+0

Это хорошо, но мне интересно, должен ли OP оставить что-либо после ID 9.Например, если была строка с идентификатором 10 и порядком 111, вам не нужно увеличивать ее порядок. – juharr

+0

это именно то, что мне нужно, спасибо @Kell – MehmetB

+0

@juharr хорошо Я хочу, чтобы все строки были перестановки. но я удивляюсь, что любая проблема с производительностью с 5000 строк? Есть ли способ быть более умным? – MehmetB

Смежные вопросы