Я пытаюсь разбить эту строку «1,1_5,2_3,4» сначала на «_», а затем разделить подстроку на «,», поэтому она будет например, «1,1_5,2_3,4» split-ed на «_», поэтому он даст эту подстроку «1,1», затем эту подстроку, разделенную на «,», а затем вставьте подстроку поддерева «1 1» в временную таблицу, как этотКак разбить строку на два символа или разделители в sql
INSERT INTO [dbo].[TEST] ([X],[Y])
VALUES (@X,@Y)
я сделал это только с расколом на один разделитель «» как этот первый я создать функцию таблицы Split
ALTER FUNCTION [dbo].[Split]
(
-- Add the parameters for the function here
@RowData nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Data nvarchar(100)
)
AS
BEGIN
-- Declare the return variable here
Declare @Cnt int
Set @cnt = 1
While(charindex(@SplitOn,@RowData) > 0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(RTRIM(SUBSTRING(@RowData,1,CHARINDEX(@SplitOn,@RowData)-1)))
set @RowData = SUBSTRING(@RowData,CHARINDEX(@SplitOn,@RowData)+1,len(@RowData))
set @Cnt = @Cnt + 1
End
insert into @RtnValue(data)
select Data = ltrim(RTRIM(@RowData))
RETURN
END
Затем я создаю эту хранимую процедуру
ALTER PROCEDURE [dbo].[uspTest]
-- Add the parameters for the stored procedure here
@StringOFXIDs nvarchar(2000)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @SOMETABLE TABLE(ID INT IDENTITY(1,1) UNIQUE, XID INT);
DECLARE @XCOUNT INT;
DECLARE @XCURRENT INT;
DECLARE @XCOUNTER INT = 1;
-- Insert statements for procedure here
INSERT INTO @SOMETABLE([XID])
SELECT [Data] FROM [dbo].[Split](@StringOFXIDs,',');
SELECT @XCOUNT = COUNT(1) FROM @SOMETABLE;
WHILE (@XCOUNTER <= @XCOUNT)
BEGIN
SELECT @XCOUNTER = [XID]
FROM @SOMETABLE
WHERE [ID] = @XCOUNTER
INSERT INTO [dbo].[TEST] ([X])
VALUES (@XCOUNTER)
SELECT @XCOUNTER +=1;
END
END
--EXEC [dbo].[uspTest] '1,2,3,4'
, а затем выполнить эту хранимую процедуру и все это работать, но я не могу понять, как разбить строку на два символа или разделителей, а затем вставляется временную таблицу спасибо за любую помощь заранее.
Ваша строка сплиттер является самым медленным из всех различных способов разделения строки в т -SQL. Ознакомьтесь с этой статьей для нескольких способов разделения строк, которые будут лучше для производительности. –
Что вы ожидаете от вывода на основе вашего примера «1,1_5,2_3,4»? –
http://stackoverflow.com/questions/21246446/split-string-in-column –