我们有一个包含HTML标记的MS SQL数据库。但是,我们需要经常更改顶部的CSS声明。有没有办法编写一个SQL查询,可以让我们轻松替换标签之间的所有内容?例如:
replace '<style>OLDSTYLES</style>' with '<style>NEWSTYLES</style>'
更具体地说 - 我们可以使用动态变量代替“OLDSTYLES”,这样我们就不必每次都复制+粘贴旧的CSS吗?
答案 0 :(得分:2)
如果HTML标记是格式良好的XML并且您熟悉XPath,那么您可以尝试以下解决方案。它应该适用于您指定的情况(样式标记),但是如果您需要修改另一个标记,则需要相应地更改XPath表达式,这里是“(/ html / style / text())[1]”。有关详细信息:XML data modification with XQuery at MSDN。
-- sample data
declare @data table
(
html xml
)
insert into @data select '<html><style>oldstyle</style><body></body></html>'
-- solution
declare @replacement varchar(50)
set @replacement = 'newstyle'
update @data
set html.modify('replace value of (/html/style/text())[1] with sql:variable("@replacement")')
select * from @data
答案 1 :(得分:1)
这应该可以正常工作,它可能需要一些调整,但它可以解决问题:
DECLARE
@markup NVARCHAR(MAX)
,@OldStyles NVARCHAR(MAX)
,@NewStyles NVARCHAR(MAX)
,@PatIndex INT
SELECT @markup = '<style>OLDSTYLES</style>'
,@OldStyles = 'OLDSTYLES'
,@NewStyles = 'NewStyles'
SET @PatIndex = PATINDEX('%<style>%',@markup)
IF @PatIndex > 0
SET @markup = REPLACE(@markup,@OldStyles,@NewStyles)
SELECT @markup
答案 2 :(得分:0)
不要硬编码(内联)样式。使用样式表和类名。
答案 3 :(得分:0)
您要做的是link to an external stylesheet。
如果这不起作用,那么在那里放置某种键串(例如“OLDSTYLES”),并在之后将替换为从数据库中取出html。