식별자 열과 구분 된 문자열이 포함 된 열이 포함 된 테이블 구조가 있습니다. 내가 달성하고자하는 것은 구분 된 구분 된 문자열의 각 값에 대해 개별 레코드로 구분 된 문자열을 새 테이블에 삽입하는 것입니다.구분 된 문자열이있는 테이블에서 레코드 삽입
이CREATE TABLE tablea(personID VARCHAR(8), delimStr VARCHAR(100))
일부 샘플 데이터가 :
INSERT INTO tablea (personID, delimStr) VALUES ('A001','Monday, Tuesday')
INSERT INTO tablea (personID, delimStr) VALUES ('A002','Monday, Tuesday, Wednesday')
INSERT INTO tablea (personID, delimStr) VALUES ('A003','Monday')
내 대상 테이블은 다음과 같다 : 나는 시도하고
CREATE TABLE tableb(personID VARCHAR(8), dayName VARCHAR(10))
을 다음과 같이
소스 테이블에 대한 나의 테이블 구조는 삽입 절차를 수행하기 위해 저장 프로 시저를 만들려면 내 SP는 다음과 같이 보입니다.
CREATE PROCEDURE getTKWorkingDays
@pos integer = 1
, @previous_pos integer = 0
AS
BEGIN
DECLARE @value varchar(50)
, @string varchar(100)
, @ttk varchar(8)
WHILE @pos > 0
BEGIN
SELECT @ttk = personID
, @string = delimStr
FROM dbo.tablea
SET @pos = CHARINDEX(',', @string, @previous_pos + 1)
IF @pos > 0
BEGIN
SET @value = SUBSTRING(@string, @previous_pos + 1, @pos - @previous_pos - 1)
INSERT INTO dbo.tableb (personID, dayName) VALUES (@ttk, @value)
SET @previous_pos = @pos
END
END
IF @previous_pos < LEN(@string)
BEGIN
SET @value = SUBSTRING(@string, @previous_pos + 1, LEN(@string))
INSERT INTO dbo.tableb (tkinit, dayName) VALUES (@ttk, @value)
END
END
합니다 (deliminated 문자열 spliting 후 새로운 테이블 600 정도 레코드 발생한다 원래 테이블에서 170 정도에서 단지 1 개 레코드) 삽입 된 데이터는 정확. 나는 위의 샘플 데이터를 사용하여 볼 기대하고 무엇
은 다음과 같습니다
는personID dayName
A001 Monday
A001 Tuesday
A002 Monday
A002 Tuesday
A002 Wednesday
A003 Monday
은 모든 자원을 지적하거나 식별 할 수있는 사람이 내가 잘못가는 방법이 쿼리를 작동하게하는 방법입니다 어디?
데이터베이스는 당신이 제공 할 수있는 모든 도움에 미리 감사 MS SQL 서버 2000
입니다.
매트 WHERE
조항이없는 "다음"사람을 얻는다, 그래서 SQL Server가 다음 사람에게 이동하는 알 방법을 잘 모르겠어요
DDL 및 샘플 데이터를 제공해 주셔서 감사합니다. 이는 매우 유용하며 문제를 재현하려는 것이 아니라 솔루션에 집중할 수있게 해줍니다. –
의견을 보내 주셔서 감사합니다. 나는 최선의 결과를 얻기 위해 최선의 질문을 만드는 방법을 천천히 배우고 있으며, 앞으로의 문제에 대해 DDL을 염두에 두겠습니다. – Lima