我正在尝试从单个表中选择一列(无连接),并且我需要行数的计数,最好是在开始检索行之前。我已经采用了两种方法来提供我需要的信息。
方法一:
SELECT COUNT( my_table.my_col ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
然后
SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
或方法 2
SELECT my_table.my_col, ( SELECT COUNT ( my_table.my_col )
FROM my_table
WHERE my_table.foo = 'bar' ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'
我这样做是因为我的 SQL 驱动程序(SQL Native Client 9.0)不允许我在 SELECT 语句上使用 SQLRowCount,但我需要知道结果中的行数,以便在分配信息之前分配一个数组。不幸的是,在我的程序的这个区域中,使用动态分配的容器不是一个选项。
我担心可能会出现以下情况:
- SELECT for count 发生
- 出现另一条指令,添加或删除一行
- SELECT for data 发生,突然数组大小错误。
- 在最坏的情况下,这将尝试写入超出数组限制的数据并使我的程序崩溃。
方法 2 是否禁止此问题?
另外,这两种方法中的一种会更快吗?如果是这样,是哪个?
最后,是否有更好的方法我应该考虑(也许是一种指示驱动程序使用 SQLRowCount 返回 SELECT 结果中的行数的方法?)
对于那些询问的人,我正在使用带有上述 SQL 驱动程序(由 Microsoft 提供)的 Native C++。