查询WHERE IN子句不起作用

时间:2016-04-07 07:32:09

标签: sql sql-server vb.net c#-4.0 oledbdataadapter

在SQL查询中,我们使用WHERE IN子句来过滤数据。当我在WHERE IN子句中传递35000个字段时,ExecuteNonQuery会抛出

  

对象引用未设置为实例异常

我在ExecuteNonQuery执行的地方使用了try catch,但异常没有捕获当前方法,它在父方法中捕获(按钮点击)

如果我将计数从35000减少到25000,则SQL查询可以正常工作。请帮忙。

SELECT * FROM COUNTRY WHERE CountryID in ('1','2',......'35000')

我也试过在SQL中使用Temp Table,发生了同样的错误。

IF OBJECT_ID('tempdb..#temp)IS NOT NULL DROP #TEMP 
CREATE TABLE #TEMP
( CountryID int NULL)
INSERT INTO #TEMP VALUES ('1')
.
.
.
INSERT INTO #TEMP VALUES('10')

SELECT * FROM COUNTRY WHERE CountryID IN(SELECT CountryID from #temp)

对象null引用错误不是问题,我如何克服sql查询中的Where In子句问题。在sql查询中避免Where in子句的可能解决方案是什么。

请帮忙。感谢。

2 个答案:

答案 0 :(得分:3)

请改用连接,这应该有效

...
for arrow in arrows:
    if arrow.y < 500:
        arrow.arrowFall()
        arrow.positionArrow()
        arrow.collisionLeft = collisionDetect(arrow, arrowleft)
        arrow.collisionRight = collisionDetect(arrow, arrowright)
        arrow.collisionUp = collisionDetect(arrow, arrowup)
        arrow.collisionDown = collisionDetect(arrow, arrowdown)
    else:
        arrow.kill()

pygame.display.update()

for e in pygame.event.get():
    ...
    if e.type == pygame.KEYDOWN:
        if e.key == pygame.K_LEFT:
            for arrow in (a for a in arrows if a.collisionLeft):
                print "collided left " + str(arrow)
        if e.key == pygame.K_RIGHT:
            for arrow in (a for a in arrows if a.collisionRight):
                print "collided right " + str(arrow)
        ...

答案 1 :(得分:0)

为什么不在两者之间使用?

SELECT * FROM COUNTRY WHERE CountryID between 1 and 10