我试图通过匹配database_tags中的名称,将'xml'fieldname中找到的名称替换为超链接。
我创建了一个简单的UDF,但它没有正确执行查询,因为它在XML fieldname中创建了重复的名称标记。
ALTER FUNCTION [dbo].[Tags](@XML VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
SELECT @XML = REPLACE(@XML,[Name],'<a href="<a href="pagename.aspx?tag='+[name]+'">'+[name]+'</a>')
FROM [dbo].[database_tags]
where UploadDate >= '2014-09-01'
RETURN @XML
END
更新: 我设法将我的功能更新为以下内容,但该功能仅仅是识别XML字段名数据中的一个名称。
DECLARE @N VARCHAR(MAX)
SELECT @N = [Name] FROM [dbo].[database_tags]
WHERE @XML LIKE '%'+[Name]+'%'
AND UploadDate >= '2014-09-01'
IF @N IS NOT NULL
BEGIN
SELECT @XML = REPLACE(@XML,
@N,
'<a href="<a href="pagename.aspx?tag='+@N+'">'+@N+'</a>')
END
RETURN @XML
END
如果可能,请进一步咨询。非常感谢
答案 0 :(得分:1)
您可以使用游标循环遍历表中的值,用超链接替换每个名称。但是替换会迫使不必要的结果。例如,如果配置的名称是单独的字符串函数的一部分,则将用超链接替换它。
Create FUNCTION [dbo].[ReplaceTags](@XML VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Name VARCHAR(MAX)
DECLARE CUR CURSOR FAST_FORWARD FOR
SELECT name
FROM database_tags
Where UploadDate >= '2014-09-01'
OPEN CUR
FETCH NEXT FROM CUR INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Name IS NOT NULL
BEGIN
SELECT @XML = REPLACE(@XML,
@Name,
'<a href="<a href="pagename.aspx?tag='+@Name+'">'+@Name+'</a>')
END
FETCH NEXT FROM CUR INTO @Name
END
CLOSE CUR;
DEALLOCATE CUR;
RETURN @XML
END