我有一个表结构,其中包含标识符列和包含已删除字符串的列。我想实现的是将分隔字符串插入到一个新表中,作为拆分分隔字符串中每个值的单独记录。插入带有已删除字符串的表中的记录
我对源表的表结构如下:
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
已插入(仅1只记录了170个左右的原始表,其劈裂的deliminated串后应导致在新表格约600左右的记录)中的数据,是不正确的。
我所期待看到使用上面的样本数据是:
personID dayName
A001 Monday
A001 Tuesday
A002 Monday
A002 Tuesday
A002 Wednesday
A003 Monday
有没有人能够指出任何资源或识别我要去的地方错了,如何使这项工作查询?
数据库是MS SQL Server 2000中
我感谢你在你能够提供的任何援助。
马特
感谢您使用DDL和示例数据!这非常有用,可以让人们专注于解决方案,而不是试图重现问题。 –
感谢您的反馈意见,我正在慢慢学习如何创建最佳问题以获得最快和最好的结果,我将为未来的问题记住DDL。 – Lima