【发布时间】:2017-05-10 10:00:05
【问题描述】:
我有一个表值函数
ALTER FUNCTION [dbo].[GetFareBasisDetails](@BookingID INT)
RETURNS TABLE
AS
RETURN
SELECT STUFF(
(
SELECT ','+REPLACE(PriceDetails.query(N'data(/FareInfo/Price/AB/PQ)').value(N'.',N'nvarchar(max)'),' ',',')
FROM [Traveler] [T]
WHERE [T].BookingID=@BookingID
FOR XML PATH('')
),1,1,'') AS FarePriceBasis;
为了获取 FarePriceBasis 的值,我在一个存储过程中使用了这个函数,该函数通过 GetFareBasisDetails 应用连接。 sp里面的代码块是
由于我的结果中有多余的逗号,所以我在 sp 中对其进行了修剪。
CASE
WHEN RIGHT(RTRIM(REPLACE([FB].FarePriceBasis,',,',',')),1) = ',' THEN
LEFT(REPLACE([FB].FarePriceBasis,',,',','), LEN(REPLACE([FB].FarePriceBasis,',,',',')) - 1)
ELSE REPLACE([FB].FarePriceBasis,',,',',') END [FarePriceBasis]
我想在函数内移动修剪逻辑。 即在 sp 内,我只能使用 [FB].FarePriceBasis。 所有的修剪逻辑都应该移到函数 GetFareBasisDetails 中。
提前致谢。
【问题讨论】:
-
你使用的是哪个版本的sql server?
-
@KannanKandasamy:使用 SQL Server 2008
-
您是否有任何示例数据和架构来突出问题?
-
@Steve :我只需要优化它,将修剪逻辑移动到 UDF 中。所以在 SP 里面我只能做 [FB].FarePriceBasis
标签: sql sql-server stored-procedures user-defined-functions