UDF 替换功能 - 无法识别字符串
Posted
技术标签:
【中文标题】UDF 替换功能 - 无法识别字符串【英文标题】:UDF replace function - failing to recognize strings 【发布时间】: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 表的示例数据和预期输出。调查会更容易。
【参考方案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
【讨论】:
感谢您的回答。感谢您的帮助,但上述解决方案在我的输入数据 (XML) 上引发了意想不到的结果。我已经更新了我上面的帖子以获取更多详细信息。如果可能,请进一步提供建议。非常感谢 你确定用这个替换原来的函数吗?我得到了给定输入的正确输出。请检查此 SQLFIDDLE (sqlfiddle.com/#!3/d28cb/3)。 嗨,很抱歉回复太晚了。通过在 database_tags 的 select 语句中添加一个 distinct 子句,我设法使上述函数在我的 sql server 数据模型上工作。非常感谢您的帮助和时间。以上是关于UDF 替换功能 - 无法识别字符串的主要内容,如果未能解决你的问题,请参考以下文章