【问题标题】:Loop N table columns and insert concatenated string into same row循环 N 表列并将连接的字符串插入同一行
【发布时间】:2018-03-27 18:06:34
【问题描述】:

我有一个字符串列表,其中包含由分隔符分隔的连接值,如下所示:

DECLARE @stringlist NVARCHAR(MAX) = 'company_no,emp_no,emp_name,emp_type,salary_type....'

我有一个临时表,其中包含动态数量的无名列,其中包含以下数据:

------------------------------
001   A01   John  P     A
001   A05   Mary  P     A

我想对字符串进行拆分,并将每个拆分后的字符串插入一行中的每一列,如下所示:

-----------------------------------------------
company_no emp_no emp_name emp_type salary_type
001        A01    John     P        A
001        A05    Mary     P        A

我可以将字符串拆分为多行。但是如何拆分和循环临时表中的每一列以插入这些值?

【问题讨论】:

  • 带有无名列的临时表是什么意思?列必须有名称。
  • 您的意思是@stringlist 变量包含最终的列名吗?

标签: tsql sql-server-2014


【解决方案1】:

根据您的示例数据和期望的结果,假设目标表中的所有列都是某种字符串类型,我建议根本不要拆分字符串。
相反,从它创建一个动态 sql 插入语句:

DECLARE @Sql nvarchar(max);
SET @Sql = 'INSERT INTO <TempTableNameHere> 
            VALUES ('''+ REPLACE(@stringList, ',', ''',''') + ''');';

EXEC(@Sql);

【讨论】:

  • @EzequielLópezPetrucci 我们有时会把事情复杂化。这就是为什么我如此喜欢KISS
  • 太棒了!经过数小时破解我的标题尝试循环每一列和每一行......无法相信一旦我们认为有点不同,解决方案会如此简单
  • 有时您所需要的只是不同的方法...很高兴为您提供帮助 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2018-11-13
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多