使用sqlserver 2005在特定位置插入值

时间:2010-07-13 10:27:49

标签: c# sql-server sql-server-2005

我有一个包含一些字段的数据库表。其中一个字段的值与

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

如何使用sql查询插入“color”如此? 我使用sql server 2005,c#。 谢谢

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();  

答案 2 :(得分:0)

我会将该列转换为XML并将数据存储为数据库中的键值对。然后,您可以将额外的值添加到XML中。

如果需要向后/传统兼容性,您还可以创建此表的视图,将XML转换回上面的格式。

答案 3 :(得分:0)

注意:这假定顺序在字符串中无关紧要。

使用自定义CLR函数或SQL#首先使用SQL #Split函数将字符串拆分为1列表(使用CROSS APPLY)。

然后UNION将您希望在您编写的查询背面插入的值插入以拆分字符串。

在结果数据集上使用自定义聚合'join'函数,以逗号分隔列表的形式重新组合。

现在可以使用UPDATE语句将数据写回来。