我假设您的信息是相同的(7 个字段,如您的示例)
declare @a varchar(500)
declare #crs insensitive cursor for
select account from mysourcetable
for read only
open #crs
fetch next from #crs into @a
while(@@FETCH_STATUS = 0)
begin
declare @rest varchar(500)
declare @field1 varchar(20)
set @field1 = SUBSTRING(@a, 0, charindex('-', @a))
set @rest = SUBSTRING(@a, charindex('-', @a) + 1, 100)
declare @field2 varchar(20)
set @field2 = SUBSTRING(@rest, 0, charindex('-', @rest))
set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)
declare @field3 varchar(20)
set @field3 = SUBSTRING(@rest, 0, charindex('-', @rest))
set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)
declare @field4 varchar(20)
set @field4 = SUBSTRING(@rest, 0, charindex('-', @rest))
set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)
declare @field5 varchar(20)
set @field5 = SUBSTRING(@rest, 0, charindex('-', @rest))
set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)
declare @field6 varchar(20)
set @field6 = SUBSTRING(@rest, 0, charindex('-', @rest))
set @rest = SUBSTRING(@rest, charindex('-', @rest) + 1, 100)
declare @field7 varchar(20)
set @field7 = @rest
insert into mytargettable (field1, field2, field3, field4, field5, field6, field7)
values (@field1, @field2, @field3, @field4, @field5, @field6, @field7)
fetch next from #crs into @a
end
close #crs
deallocate #crs
您可以将此结果放入带有游标的循环中,以通过查询滚动表结果的所有行。您可以使用插入语句代替最终选择来填充目标表。
告诉我是否还好。
编辑后:我已将原始拆分封装到光标中。游标是一种获取查询输出并使用 fetch 命令处理每一行的工具。在您的情况下,我将表的字段帐户值放在 @a 变量中。
@@FETCH_STATUS 检查是否存在其他要处理的行。因此,在迭代结束时,我将结果放入目标表并继续。
这是一个模板,您必须根据您的目标进行自定义,如果有一些 sintax 错误请修复,因为我已经写了没有经过真正的测试。祝你今天过得愉快