我正在尝试从上传的文件批量插入新表,但我还想使用左连接从其他表插入数据,你能检查我的查询有什么问题吗?
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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 0 :(得分:1)
我觉得你在这个子查询之前错过了一个逗号:
(SELECT分支 来自'+ @ sourceTable +' LEFT JOIN BRANCH_LIST ON'+@sourceTable+'.solcode = BRANCH_LIST.solcode)
无论如何,您收到的错误是因为该子查询返回多行,并且它位于查询的选择部分。你需要弄清楚如何只获得一行(例如:TOP(1))......或者回到绘图板上如何完成任务。
我还要补充一点,如果该子查询不依赖于“main”查询中的任何值,您可能希望在from子句中使用交叉连接到子查询。