的发生我有一个SQL字符串参数@branchNumber = '12,23,45'
现有的SQL字符串添加额外内容上逗号
我要寻找一个查询,将采取我的@branchNumber
参数作为输入,并扔回去格式化的结果,看起来如下:
[Branch].[Branch Number].&[12], [Branch].[Branch Number].&[23], [Branch].[Branch Number].&[45]
所以基本上每个分支添加[Branch].[Branch Number].&[<branchNumber>],
我曾尝试使用如下字符串:
ALTER FUNCTION AR_BI_SplitBranchesString
(
@Input NVARCHAR(MAX),
@Character CHAR(1)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @StartIndex INT, @EndIndex INT, @result NVARCHAR(MAX)
SET @StartIndex = 1
--IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
--BEGIN
-- SET @Input = @Input + @Character
--END
WHILE CHARINDEX(@Character, @Input) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Character, @Input)
SET @result = '[Branch].[Branch Number].&[' + (SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)) + '],'
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
END
RETURN @result
END
GO
但SELECT dbo.AR_BI_SplitBranchesString('12,54', ',')
返回的结果是
[Branch].[Branch Number].&[12],
只返回了第一家分店。我有它是因为SET @Input被再次修改。但任何援助将不胜感激。 我使用SQL Server 2014
感谢
编辑:
我有一个热膨胀系数是没有类似的东西,但是从另一个表获得分支数。我无法找到一种方法来实现它的情况下字符串。
的热膨胀系数如下:
ALTER FUNCTION [dbo].[AR_Fn_BI_GetOperatorBranchList]
(
-- Add the parameters for the function here
@operatorId varchar(20),
@applicationName varchar(100)
)
RETURNS varchar(max)
AS
BEGIN
declare @branchList as varchar(max)
;WITH cte (FId, branchNumbers) AS
(
SELECT 1, CAST('' AS NVARCHAR(MAX))
UNION ALL
SELECT B.FId + 1, B.branchNumbers + '[Branch].[Branch Number].&[' + cast(A.branchNumber as varchar) + '],'
FROM
(
SELECT Row_Number() OVER (ORDER BY Id) AS RN, cast(branchNumber as varchar(8)) as branchNumber
FROM <AnotherTable>
where OperatorId = @operatorId
and [Application] = @applicationName) A
INNER JOIN cte B ON A.RN = B.FId
)
SELECT top 1 @branchList = '{' + subString(branchNumbers, 1, len(branchNumbers) - 1)+ '}'
FROM cte
ORDER BY FId DESC
option (maxrecursion 0)
-- Return the result of the function
RETURN @branchList
END
你能送的表参数,而不是一个逗号分隔的字符串的?逗号分隔的字符串是数据库引擎的魔鬼...... –
不幸的是不是。这是接受参数的非常大的SP的一部分,branchNumber就是其中之一。 – aMazing