的發生我有一個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