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

将SQL Server查询转换为Firebird时出现问题

  •  1
  • Taudris  · 技术社区  · 15 年前

    我是Firebird的新手,在将这个T-SQL转换为Firebird-SQL时遇到了特别的困难。此代码存储在数据库之外,而不是存储在存储过程中。

    DECLARE @NumTotal int
    DECLARE @NumUsed int
    
    SELECT @NumTotal = COUNT(*)
        FROM "some_Table"
        WHERE "CreatedOn"=@CreatedOn
    
    SELECT @NumUsed = COUNT(*)
        FROM "some_Table"
        WHERE "CreatedOn"=@CreatedOn AND "UserID" IS NOT NULL
    
    SELECT @NumUsed AS "NumUsed", @NumTotal AS "NumTotal"
    

    从错误和我的实验中,我猜我基本上是被迫将其放入存储过程中的。有没有一种方法可以在不让代码进入数据库的情况下做到这一点?

    1 回复  |  直到 15 年前
        1
  •  1
  •   OMG Ponies    15 年前

    您的代码可以简化为单个查询:

    SELECT COUNT(*) AS numTotal,
           (SELECT COUNT(*)
              FROM YOUR_TABLE
             WHERE userid IS NOT NULL
               AND createdon = @createdon) AS numUsed
      FROM YOUR_TABLE
     WHERE createdon = @createdon
    

    使用双引号是用于转义不寻常字符的ANSI,我在示例中没有看到这些字符。