代码之家  ›  专栏  ›  技术社区  ›  DaJackal

这个SQL查询有什么问题?

  •  1
  • DaJackal  · 技术社区  · 14 年前

    IF EXISTS (Select * FROM MyTable) print 'Yes' else print 'No'
    

    这是我运行查询时它给我的错误:

    无效的SQL语句集;应为DELETE、INSERT、PROCEDURE、SELECT、UPDATE

    这个问题是正确的,据我所知,我想是来自Access,有人能帮我吗?谢谢

    8 回复  |  直到 14 年前
        1
  •  0
  •   PowerUser    14 年前

    有几点:

    1. Access SQL使用 iif() IF
    2. Access SQL不使用EXISTS
      :
      事实上,它确实有效,尽管我在帮助文件中找不到它。这很好:
      Select (IIf(Exists (SELECT 1 FROM [Table1]),'Y','N')) as A from [Table1];
      /编辑
    3. DCount是键:
      iif(
      DCount("AnyFieldName","TableName")>0,
      "Yes",
      "No"

    4. http://www.techonthenet.com/access/functions/
        2
  •  4
  •   momo    14 年前

    你不能使用 IF EXISTS 进入通道。允许EXISTS(),但只能作为求值表达式,不能作为过程表达式。EXISTS()表达式返回True或False(形式为-1和0)。

    使用过程表达式。。。你想在哪里打印结果?没有打印文本结果的位置。

    请更清楚地描述您试图解决的问题,以及您希望结果出现在哪里,我们可以更好地帮助您。

    SELECT Iif(EXISTS (SELECT * FROM MyTable), "Yes", "No") AS MyTableHasRows
    FROM Numbers
    WHERE Num = 1;
    

    不过,这里有一个问题:Access不允许SELECT语句不引用表。(SQLServer允许这样做,而Oracle提供了假双表来进行选择。)解决这个问题的一种方法是从只有一行的表中进行选择。我上面的查询从我的测试数据库中的Numbers表中进行选择,其中只有一行 Num = 1

    如果您想签入代码,下面是我能想到的性能最好的方法:

    If CurrentDb().OpenRecordset("SELECT Top 1 * FROM MyTable").RecordCount > 0 Then
       Debug.Print "Yes"
    Else
       Debug.Print "No"
    End If
    

        3
  •  2
  •   Neil Knight    14 年前

    IF EXISTS 不能在MS Access中使用。

    看看这个 link ,它可能就是你想要的。

        4
  •  1
  •   David-W-Fenton    14 年前

    如果想知道表中是否有记录,可以检查当前DB.TableDefs(“MyTable”).Recordcount。对于包含记录的表,这永远不会是0。

    现在,你可以使用的是一个不同的壶鱼,但你的问题是如此模糊,使它不可能提供任何东西以外的广义方法来解决问题(这还没有真正定义在第一位)。

        5
  •  0
  •   VeeWee    14 年前

    据我所知:Access有一个来自SQL的轻量级版本。您将无法使用TSQL。 你可以尝试使用vba来实现你想要的。

        6
  •  0
  •   pymendoza    14 年前

    BEGIN - END .

    坏消息 .

    http://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_22102849.html

    看起来MS Access在其SQL语法中无法控制流的执行。

    显然在MS-Access中没有条件语句。

        7
  •  0
  •   Christian Specht    14 年前


    您可以在VBA中执行以下操作:

    Public Sub Foo()
    
        If Not IsNull(DLookup("SomeColumn", "MyTable")) Then
            MsgBox "yes"
        Else
            MsgBox "no"
        End If
    
    End Sub
    
        8
  •  -1
  •   mfanto    14 年前

    IF SELECT EXISTS (SELECT 1 FROM mytable WHERE somecondition) THEN...
    

    错误消息“无效的SQL语句集;应为DELETE、INSERT、PROCEDURE、SELECT、UPDATE” 说明你少了一个。您需要选择EXISTS,而不仅仅是调用EXISTS。

    这在PostgreSQL中有效,但我不确定Access是否不同。