我被要求编辑内容的网站上有几百个基于模板的现有页面(博客文章)。我已经调整了模板内容中的电子邮件地址,因此所有新文章都会有正确的地址,但我想替换现有页面上的旧地址。
该网站是基于SQL Server数据库构建的.aspx。
我可以访问数据库,但不知道哪些表(更不用说列或单元格)包含特定的电子邮件地址。
我想首先搜索数据库,找到文本/内容中此电子邮件地址的所有外观,然后,如果没有出现会产生不利影响,我想执行查找/替换以将其更新为新地址。
我不熟悉SQL Server。我该怎么做?
仅供参考...网站上的代码(它是评论表的一部分)将永远是:
<input type="hidden" value="user@emaildomain.com.au" name="Notify" />
修改
我根本不知道html字符串在数据库中的位置,但我已经做了一些搜索,发现我需要更改电子邮件地址的页面都是由一个表和列定义的。
DB = CMSDB
Table = dbo.tblContent
Column = ContentText
我正在使用Microsoft SQL Server Management Studio Express查看数据库
答案 0 :(得分:2)
这将为数据库中所有用户表中的每个基于字符的列生成单独的UPDATE
语句。您可以将此增强嵌套,以便为任何行中不包含旧电子邮件地址的列省略任何UPDATE
语句,但作为一次性任务,增加的复杂性不太可能还清。
DECLARE
@oldEmailAddress VARCHAR(320) = 'oldaddress@foo.com',
@newEmailAddress VARCHAR(320) = 'newaddress@bar.com';
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT TOP (5) @sql += N'
PRINT N''Updating ' + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ '.' + QUOTENAME(name) + '...'';
UPDATE '
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ ' SET ' + QUOTENAME(name) + ' = REPLACE('
+ QUOTENAME(name) + ', @old, @new)
WHERE ' + QUOTENAME(name) + ' LIKE ''%'' + @old + ''%'';'
FROM sys.columns AS c
WHERE system_type_id IN (35,99,167,175,231,239)
AND EXISTS (SELECT 1 FROM sys.tables WHERE [object_id] = c.[object_id]);
PRINT @sql;
/*
EXEC sp_executesql
@sql,
N'@old VARCHAR(320), @new VARCHAR(320)',
@oldEmailAddress, @newEmailAddress;
*/
你真的应该考虑在这里放置某种令牌,并让网页用你存储在单个配置文件或表中的电子邮件地址替换令牌。您知道,而不是仅仅更换几十个电子邮件地址的实例,这些实例必须随着另一个电子邮件地址的几十个实例而改变,这些实例可能在将来的某个时间发生变化(此时您将成为争先恐后地找到这篇文章,以便你可以重复这个过程。)
如果内容仅在一个表的一列中,则您的任务更容易。但是,您应该更新您的问题以反映这一点,因为目前听起来它将在多个列/表中:
但不知道哪些表(更不用说列或单元格)包含特定的电子邮件地址。
现在你说:
DB = CMSDB,表= dbo.tblContent,Column = ContentText
因此,要求令人困惑。如果电子邮件地址确实只能出现在上面的列中,那么它如下:
USE CMSDB;
GO
DECLARE
@oldEmailAddress VARCHAR(320) = 'oldaddress@foo.com',
@newEmailAddress VARCHAR(320) = 'newaddress@bar.com';
UPDATE dbo.tblContent
SET ContentText
= REPLACE(ContentText, @OldEmailAddress, @NewEmailAddress)
WHERE ContentText LIKE '%' + @OldEmailAddress + '%';
答案 1 :(得分:0)
您可以将所有表格导出为 UPDATE 语句,然后您可以使用linux实用程序调用 sed 来更新行。
你需要这样的东西:
sed -i 's/old_email/new_email/g' sql.file