SQL Server批量插入左连接

时间:2016-04-13 02:14:57

标签: sql sql-server

我正在尝试从上传的文件批量插入新表,但我还想使用左连接从其他表插入数据,你能检查我的查询有什么问题吗?

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

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

        ''GEN048'',
        '''',
        ('+@refd+'),
        (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 '+@sourceTable+'
            LEFT JOIN BRANCH_LIST ON '+@sourceTable+'.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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

1 个答案:

答案 0 :(得分:1)

我觉得你在这个子查询之前错过了一个逗号:

(SELECT分支             来自'+ @ sourceTable +'             LEFT JOIN BRANCH_LIST ON'+@sourceTable+'.solcode = BRANCH_LIST.solcode)

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

我还要补充一点,如果该子查询不依赖于“main”查询中的任何值,您可能希望在from子句中使用交叉连接到子查询。