2010-07-13 63 views
2

我有一個包含一些字段的數據庫表。其中一個字段的值就像使用sqlserver 2005在特定位置插入值

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

如何插入「顏色」,如圖所示使用sql查詢? 我使用sql server 2005,c#。 謝謝

+2

不是規範化的數據庫;任何理由? – 2010-07-13 10:28:59

+1

請多一點信息,之前的例子會很好。 – Bobby 2010-07-13 10:29:04

+0

您是否總是在第一個由管道分隔的條目之前添加'color'作爲最後一個文本條目? – 2010-07-13 10:35:21

回答

2

剛剛找到解決方案。 我不知道它是否是好的..你可以給我規範化的解決方案..

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

我會將該列轉換爲XML並將數據作爲鍵值對存儲在數據庫中。然後,您可以將額外的值添加到XML中。

如果需要向後/遺留兼容性,還可以創建此表的視圖以將XML轉換回上面的格式。

3

要提供有用的幫助非常困難,而沒有關於要更新的​​表格架構的更多信息,以及某些數據集之前和之後的信息。

我假定該列包含一組名稱/值對,您希望爲已知行添加一個新對,並且對的順序不重要(即它可以接受總是在列表末尾添加新值)。

如果所有這些都是正確的,以下內容可能對您有所幫助。 創建兩行測試數據 - 第一行然後用新名稱(顏色)和值(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 
0

注意:這裏假定命令在字符串內無關緊要。

使用自定義CLR函數或SQL#首先使用SQL#Split函數(使用CROSS APPLY)將字符串拆分爲1列表。

然後UNION將您希望插入到您爲分割字符串而寫入的查詢背面的值插入。

在結果數據集上使用自定義聚合「連接」功能重新組裝爲逗號分隔列表。

您現在可以使用UPDATE語句將數據寫回。