Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 初始字符串为动态字符串时强制转换替换_Sql_Sql Server 2008 - Fatal编程技术网

Sql 初始字符串为动态字符串时强制转换替换

Sql 初始字符串为动态字符串时强制转换替换,sql,sql-server-2008,Sql,Sql Server 2008,我有一个首选项表。该表中有一个部分列。对于表中的每个条目,部分列将有多个值,用一个空格分隔。这些值是操作系统路径和/或设置 例如,“SELECT*FROM Preference”可以返回如下内容: UPDATE Preference SET Preference= CAST(REPLACE(CAST(Preference AS VARCHAR(MAX)), 'HomeDrive=\\?????\', 'HomeDrive=\\myserver\home') AS TEXT) HomeDrive

我有一个
首选项
表。该表中有一个
部分
列。对于表中的每个条目,
部分
列将有多个值,用一个空格分隔。这些值是操作系统路径和/或设置

例如,“SELECT*FROM Preference”可以返回如下内容:

UPDATE Preference
SET Preference= CAST(REPLACE(CAST(Preference AS VARCHAR(MAX)), 'HomeDrive=\\?????\', 'HomeDrive=\\myserver\home') AS TEXT)
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
  • 路径将始终以
    \
  • 它将与下一个值用空格分隔
但是,由于驱动器路径可以有任意数量的空间,我不确定空间分隔符是否有用


谢谢

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

  • 有自己的独立栏目
  • 在另一个表中显示为设置值对
这些信息是如何进入数据库的?更重要的是,在插入到
部分之前,是否可以将其分离出来


您也可以检查此选项以分离值。

不幸的是,数据结构必须保持不变,并且在插入之前不能分离信息。@Danielhoert-这是什么原因?因为我试图在数据库上自动执行任务,而我无法控制其架构。够公平吗?那样的话,我想你应该使用分割函数。详情请参阅。尽管您可能希望在设置中添加特殊字符,以便间隔符不再是问题。