首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“'select”返回的行太多

问“'select”返回的行太多
EN

Stack Overflow用户
提问于 2017-02-28 18:50:59
回答 2查看 144关注 0票数 0
代码语言:javascript
复制
insert into
    @resultSet
SELECT TOP (@topN)  
    field1,
    field2
FROM    
    dbo.table1 DataLog  
WHERE           
    DataLog.SelectedForProcessing is null

在上面的sql中,我将300传递给@topN,这个值是我在app.config文件中配置的,但是这个在两个不同服务器上运行的查询在一个实例中返回了304行,在另一个实例中返回了307行。

我找不到任何地方可能会干扰300,把它变成304或307,所以我开始怀疑SQL Server有时会不会返回几个额外的行?(另一台服务器上的相同代码返回预期的300行)

这是预期的行为吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-01 04:32:42

测试一下这个

代码语言:javascript
复制
declare @topN int = 100;
select @topN ;
delete * from @resultSet;
insert into
    @resultSet
SELECT TOP (@topN)  
    field1,
    field2
FROM    
    dbo.table1 DataLog  
WHERE           
    DataLog.SelectedForProcessing is null;
select count(*) 
FROM    
dbo.table1 DataLog  
WHERE           
    DataLog.SelectedForProcessing is null;
select count(*) from @resultSet;
票数 2
EN

Stack Overflow用户

发布于 2017-02-28 20:43:36

当N是常量值时,SQL Server将一致地返回TOP N行-那里没有回旋余地。

我认为有两种可能性:

  1. @topN正在获取不同的值occasion
  2. @resultSet在插入新值

之前不知何故不为空

如果@resultSet是在脚本中的其他地方声明的变量,请检查是否没有其他INSERT INTO语句留下不必要的行。

在运行时实现此功能的一种简单方法是,只需在此INSERT INTO语句之前添加另一个命令:

代码语言:javascript
复制
DELETE @resultSet;
INSERT INTO
    @resultSet
SELECT TOP (@topN)  
    field1,
    field2
FROM    
    dbo.table1 DataLog  
WHERE           
    DataLog.SelectedForProcessing IS NULL
;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42506718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档