【发布时间】:2014-11-17 20:08:14
【问题描述】:
我正在尝试通过与 database_tags 中的名称匹配,将在“xml”字段名中找到的名称替换为超链接。
我创建了一个简单的 UDF,但它没有正确执行查询,因为它在 XML 字段名中创建了重复的名称标签。
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
如果可能,请提供进一步的建议。非常感谢
【问题讨论】:
-
如果你使用 NVARCAHR insted of VARCHAR 有什么变化吗?
-
感谢您的回复。我刚刚尝试过,但它仍然输出相同的错误结果,如上所示。如果可能,请进一步提供建议。非常感谢
-
我认为这是一个 unicode(utf8) 问题。要么使用
N'your input paramters here'或更改列排序规则或其他东西。我的 unicode 知识充其量是不稳定的,所以这只是一种预感。跨度> -
感谢您的建议。
SELECT @XML = REPLACE(@XML,[Name],N'<a href="<a href="pagename.aspx?tag='+[name]+'">'+[name]+'</a>'),我尝试了您的建议,但很遗憾地通知您,它仍然输出相同的错误结果。不过谢谢。 -
您能否提供 database_tags 表的示例数据和预期输出。调查会更容易。
标签: sql sql-server sql-server-2008 tsql user-defined-functions