【问题标题】:Insert comma seperated float and varchar string into a temporary table [duplicate]将逗号分隔的 float 和 varchar 字符串插入临时表 [重复]
【发布时间】:2018-01-23 10:26:10
【问题描述】:

我有一个带值的字符串:

 @value = 'e65.89,f34.yy,sw21.67,aqw21,g45.g4'

我需要将此字符串作为单独的行插入到临时表中。

喜欢:

     VALUES
     e65.89
     f34.yy
     sw21.67 
     aqw21
     g45.g4

我试过这段代码,它适用于整数值,但是当给定浮点或 varchar 值时,它会显示错误:

代码:

CREATE TABLE #Temp (SNo INT IDENTITY(1,1),Code VARCHAR(max))

     Declare @value varchar(max)
     set @value = 'e65.89,f34.yy,sw21.67,aqw21,g45.g4'
    DECLARE @InsertStatement varchar(max) = 'insert into #Temp values ('+REPLACE(@value ,',','),(')+');';
    EXEC (@InsertStatement);

    SELECT * FROM #Temp;

错误:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'e'.

【问题讨论】:

  • 从 SQL Server 2016 开始有 STRING_SPLIT。对于较低版本,您会在这里找到大量示例...
  • 你需要引用字符串。您无法插入值 (e65.89,f34.yy,sw21.67,aqw21,g45.g4)... 相反,您需要插入值 ('e65.89','f34.yy','sw21.67','aqw21','g45.g4')
  • 关于链接问题的一个提示:这是相当古老的,答案也是如此。对它们进行排序并搜索较新的值是个好主意...如果您只需将值用引号 'e65.89' 括起来,您自己的代码就可以工作。
  • @Shnugo 但我在网上找不到答案
  • 我觉得我昨天或周日看到了这个确切的问题,但该帖子已被删除。

标签: sql sql-server sql-insert


【解决方案1】:

尝试用''(单引号)包装您插入的值

CREATE TABLE #Temp (SNo INT IDENTITY(1,1),Code VARCHAR(max))

Declare @value varchar(max)
set @value = 'e65.89,f34.yy,sw21.67,aqw21,g45.g4'
DECLARE @InsertStatement varchar(max) = 'insert into #Temp values (''' + 
REPLACE(@value ,',','''),(''')+ '''' + ');';
EXEC (@InsertStatement);

SELECT * FROM #Temp;

【讨论】:

  • 我试过这个代码只创建了表值没有被插入
  • 当我在我这边运行此代码时,会创建表并插入所有值。尝试执行 PRINT @InsertStatement 以查看您的插入语句在哪里中断
  • 当使用 PRINT @InsertStatement 时,您的插入应该显示类似于 insert into #Temp values ('e65.89'),('f34.yy'),('sw21.67'),( 'aqw21'),('g45.g4');
  • 我也用打印语句试过了。执行时结果仍然相同,显示 5 行受到影响,但它没有将其插入我的表中。它显示:(5行受影响)插入#Temp值('e65.89'),('f34.yy'),('sw21.67'),('aqw21'),('g45. g4');
  • 如果显示 5 行受到影响,则将其插入您的表中。从临时表中选择时,您没有得到任何回报吗?还要确保在再次运行语句之前使用 drop table #Temp 删除临时表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多