查询仅插入前100行

时间:2016-05-18 18:04:32

标签: sql-server

我正在使用以下查询。 但是,它只是传输前1000行,就是这样。即使我有更多的行。 如果我删除protected[services] def computeMigrationHash(toVersion: Int): String = { val migrationClassName = MigrationClassNameFormat.format(toVersion, toVersion) val migrationClass = Class.forName(migrationClassName) val fileName = migrationClass.getName.replace('.', '/') + ".class" val resource = getClass.getClassLoader.getResource(fileName) logger.debug("Migration file - " + resource.getFile) val file = new File(resource.getFile) val hc = Files.hash(file, Hashing.md5()) logger.debug("Calculated migration file hash - " + hc.toString) hc.toString } 子句,我会获得完整数据。你能告诉我哪里错了吗?

where not exists

为什么只插入前1000行?

3 个答案:

答案 0 :(得分:0)

WHERE NOT EXISTS (  
    SELECT 1 FROM Table1
)

仅对第一批插入评估为true。之后,目标表中有记录,WHERE子句的计算结果为false,因此不会再进行插入。

答案 1 :(得分:0)

Table2中有多少行?你的第二个循环将产生(1 < (TableCount / 1001)的WHILE条件,如果你的表计数超过1001行,它将在第一个循环后跳出。

答案 2 :(得分:0)

DECLARE @BatchSize INT = 1000
DECLARE @Counter INT = 0
--DECLARE @TableCount INT = 0
--set @TableCount = (select count(*) from Table2)
declare @rows int = 1
while @rows>0--@Counter < (@TableCount/@BatchSize+1)
BEGIN

    INSERT INTO Table1 
    SELECT * FROM Table2 MH
    inner join Table3 M
    on MH.Mid = M.Mid
    --if you want non-existing
    left join table1 t on t.field = M.field
    where t.field is null
    -- end if you want
    --WHERE NOT EXISTS (  --not exists WHAT?
    --    SELECT 1 FROM Table1
    --)   
    order by id OFFSET (@BatchSize * @Counter) ROWS FETCH NEXT @Batchsize ROWS ONLY;
    --SET @Counter=@Counter+1
    select @rows = @@rowcount, @counter = @counter + 1 
END