2013-12-09 6 views
1

Вот моя проблема:SQL Как вставить новую строку в середине стола

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

Например:

У меня есть эта таблица с этой строкой:

ID|Value 
1 |Sample1 
2 |Sample2 
3 |Sample3 

Но теперь я хочу, чтобы вставить новую строку, в которой Sample2 есть, так что таблица должна быть как:

ID|Value 
1 |Sample1 
2 |NewSample 
3 |Sample2 
4 |Sample3 

Любые мысли?

+2

Почему вы хотите перенумеровать все существующие значения? Надеюсь, они не известны, не идентифицируются и не используются в других местах. Кроме того, вы используете MySQL или SQL Server? Выберите его. –

+2

Нет такой вещи, как «середина стола». Строки в реляционной базе данных ** НЕ СОРТИРОВАНЫ **. –

+0

Да, не беспокойтесь об этом. – Strawberry

ответ

1

Любые мысли?

Да. Пожалуйста, забудьте об изменении первичного ключа (ID), если у вас есть ссылки где-нибудь.

Вместо добавления столбца (например, ViewOrder), который обрабатывает это явно для вас:

ID|Value  | ViewOrder 
1 |Sample1 |1 
5 |NewSample |2 
2 |Sample2 |3 
3 |Sample3 |4 

запросов для выбора:

SELECT ID, Value, ViewOrder FROM yourTable ORDER BY ViewORDER 

Insert/Update будет выглядеть примерно так (в то время как YourRowIndex - это индекс, в который вы хотите вставить новую строку, конечно):

UPDATE dbo.table SET VIEWORDER = VIEWORDER + 1 WHERE VIEWORDER >= @YourRowIndex ; 
SET IDENTITY_INSERT dbo.table ON 
INSERT dbo.table (Value, ViewOrder) VALUES (@YourValue, @YourRowIndex); 
0

В SQL Server, основной подход будет:

DECLARE @value VARCHAR(32), @ID INT = 2; 

UPDATE dbo.table SET ID = ID + 1 WHERE ID >= 2; 

INSERT dbo.table (ID, Value) SELECT @ID, @Value; 

Но имейте в виду, что, если эти значения упоминаются в других таблицах, или конечные пользователи знают, что ID = 3 в настоящее время относится к, это происходит (или не быть возможным).

Также важно помнить, что по определению таблица неупорядоченный набор строк - нет «середины» таблицы.

2

Простой способ добавить новый столбец - установите его в такое же значение, как ID и тогда у вас есть два варианта, если вы сделаете это числовым вы можете просто добавить значение между

ID | Value  | OrderCol 
1 | Sample1 | 1 
4 | NewSample | 1.5 
2 | Sample2 | 2 
3 | Sample3 | 3 

другой вариант - перенумеровать порядок - это может быть медленным, если в таблице много вещей.

Возможно, вы не хотите изменять идентификатор, так как может быть внешняя таблица, которая ссылается на этот идентификатор.

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