我有一个表值函数
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的值,我在一个应用join和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中移动。
提前谢谢。
发布于 2017-05-10 10:25:53
我想我一定是遗漏了什么,因为您可以将case语句移到函数中。它不漂亮,毫无疑问有一个更好的解决方案,但你可以这样做。
ALTER FUNCTION [dbo].[GetFareBasisDetails](@BookingID INT)
RETURNS TABLE
AS
RETURN
SELECT CASE WHEN RIGHT(RTRIM(REPLACE([FB].FarePriceBasis,',,',',')),1) = ','
THEN LEFT(REPLACE([FB].FarePriceBasis,',,',','), LEN(REPLACE([FB].FarePriceBasis,',,',',')) - 1)
ELSE REPLACE([FB].FarePriceBasis,',,',',') END [FarePriceBasis]
FROM ( SELECT STUFF(
(
SELECT ','+REPLACE(PriceDetail,' ',',')
FROM [Traveler] [T]
WHERE [T].BookingID=@BookingID
FOR XML PATH('')
), 1, 1, '') AS FarePriceBasis
) FB
GOhttps://stackoverflow.com/questions/43889196
复制相似问题