如何在单个插入查询中插入多个拆分字符串

时间:2018-05-02 22:07:41

标签: sql

  Declare @APS nvarchar(1000)='1,1,1.79103540163304,1.79103540163304'
          ,@cluster nvarchar(1000)='0150,0019,0150,0019'
          ,@style nvarchar(1000)='696707-018,696707-018,696707-017,696707-017'

     CREATE TABLE #temptable (
      ID int IDENTITY (1, 1) NOT NULL ,
      stylecolor varchar (500) NOT NULL ,
      APSDev varchar (250)  NULL,
      ClusterID varchar(1000) Null
     ) 

我想插入

  insert into #temptable  (stylecolor, ClusterID, APSDev)
  select  item  from  [<table name>]. dbo.SplitString(@style,',') 
  select  item  from  [<table name>].dbo.SplitString(@cluster,',')
  select  item  from  [<table name>]. dbo.SplitString(@APS,',')

获取错误:

  

INSERT语句的选择列表包含的项目少于插入      名单。 SELECT值的数量必须与INSERT列的数量匹配。

输出结果:应该是这样的

  stylecolor  clusterID      APSDev
  696707-018    0150            1
  696707-018    0019             1
  696707-017    0150             1.79103540163304
  696707-017    0019             1.79103540163304

1 个答案:

答案 0 :(得分:0)

如果您的SplitString函数类似于here找到的函数,您可以创建一个返回包含两个字段list_indexlist_value的表的修改版本。然后使用如下查询:

INSERT INTO #temptable  (stylecolor, ClusterID, APSDev)
SELECT s.list_value, c.list_value, a.list_value
FROM dbo.SplitStringWithIndex(@style,',') AS s
INNER JOIN dbo.SplitStringWithIndex(@cluster,',') AS c ON s.list_index = c.list_index
INNER JOIN dbo.SplitStringWithIndex(@APS,',') AS a ON s.list_index = a.list_index
;

修改我链接的那个应该只涉及在它的主循环中添加一个计数器。