我正在使用一个MERGE查询,该查询将超过8亿条记录从同一数据库中的另一个表插入一个表中(转换项目)。当我们为SQL合并而必须写入的特定表时,我们在下面遇到此错误。
2019-02-05 16:35:03.002错误无法在数据库'tempdb'中为对象'dbo.SORT临时运行存储:140820412694528'分配空间,因为'PRIMARY'文件组已满。通过删除不需要的文件,在文件组中删除对象,向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
MERGE dbo.' + @p_TargetDLTable + ' as TARGET
USING dbo.' + @p_SourceDLSDTable + ' as SOURCE
ON (TARGET.docid = source.docid AND TARGET.objectid = source.objectid AND
target.pagenum = source.pagenum
and target.subpagenum = source.subpagenum and target.pagever =
source.pagever and target.pathid = source.pathid
and target.annote = source.annote)
WHEN NOT MATCHED BY TARGET AND source.clipid != ''X''
THEN INSERT (docid, pagenum, subpagenum, pagever, objectid, pathid, annote,
formatid, ftoffset, ftcount) VALUES (
source.docid, source.pagenum, source.subpagenum, source.pagever,
source.objectid, source.pathid,source.annote ,source.formatid
,source.ftoffset, source.ftcount); '
之所以决定在INSERT INTO上使用MERGE查询,是因为所有研究都针对必须完成的连接类型,它将导致更快的性能。
是否有增加TempDB的方法,或者有没有让Merge不必使用TempDB的方法? INSERT INTO查询是否也使用TempDB?