Sql server 2005 在TSQL中将查询结果一分为二(获得2个结果集/表)

Sql server 2005 在TSQL中将查询结果一分为二(获得2个结果集/表),sql-server-2005,tsql,memory-management,Sql Server 2005,Tsql,Memory Management,我有一个返回大量重行的查询 当我在CustomObject列表中转换这些行时,我有一个很大的内存峰值,而这个转换是由一个我无法修改的自定义dotnet框架进行的 我需要检索较少的行数,以便在两个过程中进行转换,然后避免内存峰值 如何将查询结果拆分为一半?我需要在数据库层做这件事。我想做一个最高计数*/2,但如何得到另一半 谢谢大家! 这里有另一种方法。我认为这样更有效: Declare @Rows Int Declare @TopRows Int Declare @BottomRows Int

我有一个返回大量重行的查询

当我在CustomObject列表中转换这些行时,我有一个很大的内存峰值,而这个转换是由一个我无法修改的自定义dotnet框架进行的

我需要检索较少的行数,以便在两个过程中进行转换,然后避免内存峰值

如何将查询结果拆分为一半?我需要在数据库层做这件事。我想做一个最高计数*/2,但如何得到另一半


谢谢大家!

这里有另一种方法。我认为这样更有效:

Declare @Rows Int
Declare @TopRows Int
Declare @BottomRows Int

Select @Rows = Count(*) From TableName

If @Rows % 2 = 1
  Begin    
    Set @TopRows = @Rows / 2
    Set @BottomRows = @TopRows + 1
  End
Else
  Begin
    Set @TopRows = @Rows / 2
    Set @BottomRows = @TopRows
  End    

Set RowCount @TopRows

Select * From TableName Order By DisplayOrder

Set RowCount @BottomRows

Select * From TableNameOrder By DisplayOrderDESC
--下面是老答案-- 这是存储过程调用还是动态sql?你能用临时表吗

如果是这样的话,像这样的事情就行了

select row_number() OVER(order by yourorderfield) as rowNumber, * 
  INTO #tmp
FROM dbo.yourtable

declare @rowCount int
SELECT @rowCount = count(1) from #tmp

SELECT * from #tmp where rowNumber <= @rowCount / 2

SELECT * from #tmp where rowNumber > @rowCount / 2

DROP TABLE #tmp

这里有另一种方法可以从。我认为这样更有效:

Declare @Rows Int
Declare @TopRows Int
Declare @BottomRows Int

Select @Rows = Count(*) From TableName

If @Rows % 2 = 1
  Begin    
    Set @TopRows = @Rows / 2
    Set @BottomRows = @TopRows + 1
  End
Else
  Begin
    Set @TopRows = @Rows / 2
    Set @BottomRows = @TopRows
  End    

Set RowCount @TopRows

Select * From TableName Order By DisplayOrder

Set RowCount @BottomRows

Select * From TableNameOrder By DisplayOrderDESC
--下面是老答案-- 这是存储过程调用还是动态sql?你能用临时表吗

如果是这样的话,像这样的事情就行了

select row_number() OVER(order by yourorderfield) as rowNumber, * 
  INTO #tmp
FROM dbo.yourtable

declare @rowCount int
SELECT @rowCount = count(1) from #tmp

SELECT * from #tmp where rowNumber <= @rowCount / 2

SELECT * from #tmp where rowNumber > @rowCount / 2

DROP TABLE #tmp
然后

但是,除非首先对数据进行快照,否则中间行可能会滑动或被处理两次

然后


但是,除非首先对数据进行快照,否则中间行可能会滑动或被处理两次

< p>如果表中有标识字段,请选择第一个偶数ID,然后选择奇数个。
select * from Table where Id % 2 = 0

select * from Table where Id % 2 = 1

每个集合中应该有大约50%的行。

如果表中有标识字段,请先选择偶数标识,然后选择奇数标识

select * from Table where Id % 2 = 0

select * from Table where Id % 2 = 1

每个集合中应该有大约50%的行。

我认为不应该在SQL中这样做,除非您总是有可能拥有相同的记录2次


我会用软件编程语言,而不是SQL。java,.net,C++等,.< /p> < p>我不认为你应该在SQL中这样做,除非你总是有可能有2次相同的记录。
我会用软件编程语言,而不是SQL。java,.net,C++等等…./p>这是完美的,我想知道在查询中查看一个视图是否更好地使用一个临时表或者包含ROWNITE列?这是完美的,我想知道在查询中获取一个视图是否更好地使用一个临时表或者包含RoWo号列?