У меня есть таблица, где столбец выглядит следующим образом:синтаксического анализа через запятую колонки, чтобы вставить в таблицу
Column 0
2013-11-27 13:11:00,1XRTT,DATA,East Michigan,Region 2,East Michigan_PORT HURON_CL#17,LNS1,2436,DE60XC049,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,,,,,,,76,0,0,0,0,0,0,0,41,35,0,2.59444444444444444444444444444444444444,0,76,0,0,0,168,168,,,,,,,,,,,,,,,,,,,,,,,,,155.666666666666666666666666666666666667,0,0,0,0,0,3,0,104,0,0,0,150,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0
я хотел бы, чтобы разобрать его в другую таблицу со столбцами для каждого из разделителей. У меня уже создана таблица вставки, но как ее разобрать в новую таблицу?
на основе комментарий от Mate, я сделал это
создал такую функцию:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString_Using_CTE_Charindex]')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SplitString_Using_CTE_Charindex]
GO
CREATE FUNCTION SplitString_Using_CTE_Charindex (@csv_str VARCHAR(8000),@delimiter varchar(20))
RETURNS @splittable TABLE (id int identity(1,1), csvvalues VARCHAR(8000))
AS
BEGIN
-- Check for NULL string or empty sting
IF (LEN(@csv_str) < 1 OR @csv_str IS NULL)
BEGIN
RETURN
END
; WITH csvtbl(i,j)
AS
(
SELECT i=1, j= CHARINDEX(@delimiter,@[email protected])
UNION ALL
SELECT i=j+1, j=CHARINDEX(@delimiter,@[email protected],j+1)
FROM csvtbl
WHERE CHARINDEX(@delimiter,@[email protected],j+1) <> 0
)
INSERT INTO @splittable (csvvalues)
SELECT SUBSTRING(@csv_str,i,j-i)
FROM csvtbl
RETURN
END
GO
затем выбежала это:
DECLARE @csv_str VARCHAR(8000)
,@delimiter VARCHAR(20)
SET @csv_str = (select * from testimport);
SET @delimiter =','
SELECT * FROM dbo.SplitString_Using_Charindex(@csv_str,@delimiter)
, но потом я получил это:
Msg 512, Level 16, State 1, Line 3
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
I di d a верхняя часть 1 в запросе тоже, но получила это:
Msg 530, Level 16, State 1, Line 43
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
Проверить http://prosqlserver.com/blog/2011/02/05/parsing-csv-or-other-delimited-strings-in-sql-server/. Вы могли бы SELECT INTO с результатом функции – Mate
обновили вопрос Mate на основе вашего предложения ... Спасибо! – user2061886
Я думаю, что «выберите * из testimport» возвращает более одного результата. Вам нужен курсор или что-то, чтобы повторять результаты и вызывать функцию для каждого результата ... Попробуйте с помощью «select top 1 * from testimport», а если работает ... перейдите на курсор – Mate