2016-04-13 113 views
1

我想从上载文件批量插入到新表中,但我也想从其他表中使用左连接插入数据,你能检查我的查询出了什么问题吗?SQL Server批量插入左连接

INSERT INTO gen048_ACCNUMS (accnum) 
    SELECT DISTINCT REPLACE(dbo.fn_Parsename(WHOLEROW,'|',10), CHAR(9), '') 
    FROM #temp1 

set @sql = ' 
    INSERT INTO '[email protected]+' (ftype, ccode, refdate, dupload, accname, add1, add2, zip, add3, add4, add5, accdate, book, solcode) 
    SELECT 

     ''GEN048'', 
     '''', 
     ('[email protected]+'), 
     (SELECT CONVERT(VARCHAR(12),GETDATE(), 101)), 
     dbo.fn_Parsename(WHOLEROW,''|'',0), 
     dbo.fn_Parsename(WHOLEROW,''|'',1), 
     dbo.fn_Parsename(WHOLEROW,''|'',2), 
     dbo.fn_Parsename(WHOLEROW,''|'',3), 
     dbo.fn_Parsename(WHOLEROW,''|'',4), 
     dbo.fn_Parsename(WHOLEROW,''|'',5), 
     dbo.fn_Parsename(WHOLEROW,''|'',6), 
     dbo.fn_Parsename(WHOLEROW,''|'',7), 

     (select substring(dbo.fn_Parsename(WHOLEROW,''|'',8), 1, 1)), 
     (select substring(dbo.fn_Parsename(WHOLEROW,''|'',8), 1, 3)), 

     (SELECT branch 
      FROM '[email protected]+' 
      LEFT JOIN BRANCH_LIST ON '[email protected]+'.solcode = BRANCH_LIST.solcode) 

    FROM #temp1' 

     print @sql 
     exec (@sql) 

    SELECT 'File has been successfully uploaded', @fileDate,'success' as msg 

END 

这是SQL消息

FROM#temp1中 子查询返回大于1倍的值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。

+4

它会产生错误吗?它做错了什么? –

+1

你还可以发布'print @ sql'的输出吗? – Squirrel

+0

没有告诉我们确切的问题/错误信息,我们很难帮助你。 – Greg

回答

0

它看起来像你对我错过这个子查询前的逗号:

(SELECT分公司 FROM '+ @ + sourceTable会' LEFT JOIN BRANCH_LIST ON'[email protected]+'.solcode = BRANCH_LIST。 solcode)

无论如何,您收到的错误是因为该子查询返回多个行并且它在查询的选定部分。你需要弄清楚如何获得一行(例如:TOP(1))......或者返回到绘图板以了解如何完成您的任务。

我还会补充说,如果该子查询不依赖于“主”查询中的任何值,则可能需要对from子句中的子查询使用交叉连接。