当初始字符串是动态时,Cast替换

时间:2012-05-23 16:21:05

标签: sql sql-server-2008

我有一张Preference表。该表中包含Section列。对于表中的每个条目,Section列将具有由单个空格分隔的多个值。这些值是操作系统路径和/或设置。

例如`SELECT * FROM Preference'可以返回如下内容:

HomeDrive=C:\Windows\ ExternalDrive=D:\ Server=\\server\file\

您会注意到驱动器可以作为字母路径输入,也可以作为UNC路径输入。困难的是,这些条目中的任何地方都可以进行设置。另一个例子:

HomeDrive=C:\Windows\ UseHD=True ExternalDrive=D:\ Server=\\server\file\ FavoriteFolder=X

我需要设置这些值,无论它们与我的默认值集合如何:

HomeDrive=\\myserver\home ExternalDrive=\\myserver\backup Server=\\myserver\public

我还必须保留此条目中的所有额外设置,因此不可能将整个条目更改为我的3组路径。

我想我会用这样的东西:

UPDATE Preference
SET Preference= CAST(REPLACE(CAST(Preference AS VARCHAR(MAX)), 'HomeDrive=\\?????\', 'HomeDrive=\\myserver\home') AS TEXT)

因为原始驱动器路径是动态的(我的'?????'在查询中),我不知道如何完成。关于每条路径唯一确定的事情是:

  • 它可以是字母驱动器,也可以是UNC
  • 路径始终以\
  • 结尾
  • 将使用空格
  • 与下一个值分隔

但是,因为驱动器路径可以有任意数量的空格,所以我不确定空间分隔符是否有用。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为问题的根源在于存储这些设置的方式。关系数据库将不同的数据与列分开,因此每个设置都应该:

  • 拥有自己独立的专栏
  • 在另一个表格中显示为设置值对

这些信息是如何在数据库中结束的?更重要的是,可以将之前分开插入Section吗?

您还可以查看此split function以分隔值。