[英]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.