我有一個包含一些字段的數據庫表。其中一個字段的值就像使用sqlserver 2005在特定位置插入值
,code,removeformat,undo,redo,cut,copy,color,|1|1,2,3,|0|500,400|1078,|False|500|
如何插入「顏色」,如圖所示使用sql查詢? 我使用sql server 2005,c#。 謝謝
我有一個包含一些字段的數據庫表。其中一個字段的值就像使用sqlserver 2005在特定位置插入值
,code,removeformat,undo,redo,cut,copy,color,|1|1,2,3,|0|500,400|1078,|False|500|
如何插入「顏色」,如圖所示使用sql查詢? 我使用sql server 2005,c#。 謝謝
剛剛找到解決方案。 我不知道它是否是好的..你可以給我規範化的解決方案..
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();
我會將該列轉換爲XML並將數據作爲鍵值對存儲在數據庫中。然後,您可以將額外的值添加到XML中。
如果需要向後/遺留兼容性,還可以創建此表的視圖以將XML轉換回上面的格式。
要提供有用的幫助非常困難,而沒有關於要更新的表格架構的更多信息,以及某些數據集之前和之後的信息。
我假定該列包含一組名稱/值對,您希望爲已知行添加一個新對,並且對的順序不重要(即它可以接受總是在列表末尾添加新值)。
如果所有這些都是正確的,以下內容可能對您有所幫助。 創建兩行測試數據 - 第一行然後用新名稱(顏色)和值(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
注意:這裏假定命令在字符串內無關緊要。
使用自定義CLR函數或SQL#首先使用SQL#Split函數(使用CROSS APPLY)將字符串拆分爲1列表。
然後UNION將您希望插入到您爲分割字符串而寫入的查詢背面的值插入。
在結果數據集上使用自定義聚合「連接」功能重新組裝爲逗號分隔列表。
您現在可以使用UPDATE語句將數據寫回。
不是規範化的數據庫;任何理由? – 2010-07-13 10:28:59
請多一點信息,之前的例子會很好。 – Bobby 2010-07-13 10:29:04
您是否總是在第一個由管道分隔的條目之前添加'color'作爲最後一個文本條目? – 2010-07-13 10:35:21