Вставка значения в определенную позицию с помощью sqlserver 2005 - PullRequest
2 голосов
/ 13 июля 2010

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

,code,removeformat,undo,redo,cut,copy,color,|1|1,2,3,|0|500,400|1078,|False|500|

как я могу вставить "цвет", как показано с помощью SQL-запроса это? Я использую SQL Server 2005, C #. спасибо

Ответы [ 4 ]

3 голосов
/ 13 июля 2010

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

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

Если все это правильно, вам может помочь следующее.Создаются две строки тестовых данных - первая строка затем обновляется новым именем (цветом) и значением (500).

DECLARE @t TABLE
(id INT
,attributes VARCHAR(MAX)
)

INSERT @t
       SELECT 1,',code,removeformat,undo,redo,cut,copy,|1|1,2,3,|0|500,400|1078,|False|'
UNION  SELECT 2,',code,removeformat,undo,redo,cut,copy,|1|1,2,3,|0|500,400|1078,|False|'


UPDATE @t
SET attributes = LEFT(attributes,CHARINDEX('|',attributes,0) - 1 ) + 'color,' + SUBSTRING(attributes,CHARINDEX('|',attributes,0),999999) + '500|'
WHERE id = 1

SELECT *
FROM @t
2 голосов
/ 15 июля 2010

только что нашел решение. я не знаю, если это хорошо .. вы можете дать мне нормализованное решение ..

int startIndex = test.LastIndexOf(",|1");  
string insert = test.Insert(startIndex, ",color");  
SqlCommand cmd = new SqlCommand("update tableName set value='" + insert + "' where Id='1'", con);  
cmd.ExecuteNonQuery();  
0 голосов
/ 13 июля 2010

ПРИМЕЧАНИЕ. Предполагается, что порядок внутри строки не имеет значения.

Используйте либо пользовательскую функцию CLR, либо SQL # , чтобы сначала разбить строку натаблица из 1 столбца, использующая функцию SQL # Split (используйте CROSS APPLY).

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

Используйте пользовательскую агрегатную функцию 'join' в результирующем наборе данных для повторной сборки в виде списка через запятую.

Теперь вы можете использовать инструкцию UPDATE для записи данных обратно.

0 голосов
/ 13 июля 2010

Я бы преобразовал этот столбец в XML и сохранил ваши данные в виде пары ключ-значение в базе данных. Затем вы можете просто добавить дополнительные значения в XML.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...