2016-01-24 73 views
0

UDF替换查找文本不是我的那杯茶可悲的是,我使用SQL2014吨-SQL用户定义的函数从表中

我想通过看使用UDF中的字符串替换文本从另一列中的同一行替换值的表中替换值我设法找到下面的这个例子,但只删除查找表的最后一行

这是一个不是很完美所以我正在寻找一个将工作请

USE [WebProductDataBase] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE FUNCTION [dbo].[Ufn_ReplaceSeller] 
(
@Value varchar(max) 
) 
RETURNS varchar(max) 
AS 
BEGIN 

declare @Return varchar(max) 

SELECT @return = Replace(@Value, LookupValue, ReplaceValue) FROM dbo.Dim_Seller 

RETURN @return 
End 

这是从我的查找表的提取物(目前的价值,我们需要replaceValue设置为空因为这是是我们需要去除字符串中的LookupValue)请参见下面示例中的字符串与所需要的结果

SellerID Name   LookupValue  ReplaceValue SellerUrl DataID 
AW2485  ActivInstinct ActivInstinct        1 
AW6342  All Outdoor  All Outdoor         2 
AW3023  Ambr   Amb           3 
AW3469  Amp Bos   Amp Bos          4 
AW988  Beau Expert  Beau Expert         5 
AW222  Sloggi   Sloggi          6 
AW333  Ladies   Ladies          7 

Source Row Field Result Needed 
Ladies 1 Pack Sloggi Invisible Supreme Midi Briefs 
Ladies 1 Pack Sloggi Invisible Supreme Midi Briefs 
Ladies 1 Pack Sloggi EverNew Cotton Midi Briefs 
Ladies 1 Pack Sloggi EverNew Cotton Midi Briefs 

更好的选择将是一个多替换功能,因为我需要一个查找和删除多个值前进
源行字段结果所需 女士1包Sloggi隐形最高法院南部内裤隐形最高法院内裤 女士2包Sloggi长新棉Midi简介EverNew棉短裤

So the LookupValue would be  ReplaceValue 
Sloggi       Blank 
Ladies       Blank 
Midi       Blank 
Packs       Blank 
Pack       The rest below would also be blank for now 
1 
2 
3 
4 
5 
6 
7 
8 
9 
0 

由A.这在前面,并在年底

这份名单将是相当长,该项目

回答

1

我想结束下面的工作空间:

BEGIN 
    declare @Return varchar(max); 

    SET @Return = @Value; 

    SELECT @return = Replace(@return, LookupValue, ReplaceValue) 
    FROM dbo.Dim_Seller; 

    RETURN @return; 
End; 

我不喜欢在这样的函数中使用变量(修改变量并同时设置它)。然而,这个版本应该可以工作,并且比使用表格或游标的while循环的代码更简单,并且应该比递归CTE更快。

+0

嗨戈登,这正是我需要很多很多谢谢 –