繁体   English   中英

搜索并替换mssql表中的部分字符串/子字符串

[英]Search and Replace a a partial string / substring in mssql tables

我的任务是将Orchard CMS的安装移至其他服务器和域。 所有内容(页面内容,菜单结构,链接等)都存储在MSSQL数据库中。 好处是:将Orchard安装的物理文件移动到新服务器时,数据库将保持不变,无需迁移它。 不好的事情:在页面和菜单上散布着很多绝对URL。

我已经隔离/固定了出现URL的表和字段,但是我缺乏(MS)SQL的经验/知识来进行“搜索-替换”。 因此,我来​​这里寻求帮助(我曾尝试将表导出到.sql文件,在文本编辑器中进行搜索替换,然后将.sql文件重新导入数据库,但是遇到了一些语法错误...因此,我需要以“ SQL方式”执行此操作)。

举个例子:

Common_BodyPartRecord具有包含HTML内容的ntext类型的Text字段。 我需要查找部分字符串/oldserver.com/foo/每一次/oldserver.com/foo/ ,并将其替换为/newserver.org/bar/ 同一张表条目中可能存在该模式的多次出现。

(总共有5种模式需要替换,URL的所有部分字符串/子字符串,域/路径等)

我通常会做前端工作,偶然地参加了这项工作。 早在我从事与PHP相关的工作时,我就使用过MySQL,但从未错过过SQL的基础知识-如果您可以使您的解释或多或少对新手友好,那么这将很有帮助。

SQL Server版本是SQL Server 9.0.4053 ,我可以通过Microsoft SQL Server Management Studio 12访问数据库。

任何帮助深表感谢!

您不能直接操作NTEXT数据类型,但可以将其CAST转换VARCHAR(MAX) ,然后使用REPLACE函数执行字符串替换,然后将其CAST转换回NTEXT。 所有这些都可以在一个UPDATE语句中完成。

update MyTable 
    set MyColmun = cast(replace(cast(MyColumn as nvarchar(max)), N'/oldserver.com/foo/', N'/newserver.org/bar/') as ntext)
    where cast(MyColumn as nvarchar(max)) LIKE N'%/oldserver.com/foo/%'

下面的UPDATE语句中的WHERE子句用于防止SQL Server进行不更改,即,如果不需要更改该值,则无需将其更新为自身。

CAST函数用于更改值的数据类型。 NTEXT是用于存储大字符值的旧数据类型,NVARCHAR(MAX)是一种用于存储大字符值的新型且用途更多的数据类型。 REPLACE函数不能对NTEXT值进行操作,因此需要先将其CAST转换为NVARCHAR(MAX),进行替换,然后将其CAST转换回NTEXT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM