【发布时间】:2014-06-22 04:12:22
【问题描述】:
drop table #temp
Create Table #Temp
(
col1 Varchar(20),
col2 Varchar(20),
Col3 Varchar(50),
col4 Varchar(20)
)
Select * From #Temp
Insert Into #Temp(col1)
Select * From SplitDelimiterString('123,456', ',')
Insert Into #Temp(col2)
Select * From SplitDelimiterString('abc,def', ',')
Insert Into #Temp(Col3)
Select * From SplitDelimiterString('fff,ggg', ',')
Insert Into #Temp(col4)
Select * From SplitDelimiterString('520002,520003', ',')
Select * From #Temp
仅供参考,SplitDelimiterString 是一个函数。 -- SplitDelimiterString 的代码
创建 FUNCTION [dbo].[SplitDelimiterString] (@StringWithDelimiter VARCHAR(8000), @Delimiter VARCHAR(8)) 返回 @ItemTable 表(项目 VARCHAR(8000)) 作为 开始 声明@StartingPosition INT; 声明 @ItemInString VARCHAR(8000); 选择@StartingPosition = 1; --如果字符串为空或空则返回 如果 LEN(@StringWithDelimiter) = 0 或 @StringWithDelimiter 为 NULL 返回; 而@StartingPosition > 0 开始 --获取分隔符的起始索引..如果是字符串 -- 不包含任何分隔符,它将返回 0 SET @StartingPosition = CHARINDEX(@Delimiter,@StringWithDelimiter); --从字符串中获取项目 如果@StartingPosition > 0 SET @ItemInString = SUBSTRING(@StringWithDelimiter,0,@StartingPosition) 别的 SET @ItemInString = @StringWithDelimiter; --如果项目不为空,则添加到返回表 如果(LEN(@ItemInString)> 0) 插入@ItemTable(Item) 值 (@ItemInString); --从字符串中删除插入的项目 SET @StringWithDelimiter = SUBSTRING(@StringWithDelimiter,@StartingPosition + LEN(@Delimiter),LEN(@StringWithDelimiter) - @StartingPosition) --如果字符串为空则中断循环 IF LEN(@StringWithDelimiter) = 0 中断; 结尾 返回 结尾--结果集是
Col1 Col2 Col3 Col4 123 空 空 空 第456章 空 abc 空 空 空定义空空 NULL NULL fff NULL NULL NULL ggg NULL 空 空 空 520002 空 空 空 520003-- 我需要一个类似的结果集
-- 结果集是
请帮忙。
【问题讨论】:
-
问题没有很好的定义。该要求中不同列的关联是什么?
-
您需要定义它们之间的关系。它只是在分隔字符串中的位置吗?如果是这样,您还可以从函数中返回行号,然后将它们连接在一起以构成 1 个插入语句。
-
@liebs19 非常感谢......我明白了。
-
@user3605493,很高兴我能够为您指明正确的方向。您应该将您的解决方案作为答案发布并接受它,而不是仅仅将其编辑到帖子中。您可以在本网站上回答您自己的问题。
-
@liebs19 我该怎么做?我是这个网站的新手。