我试图从一个表中选择一个列(没有连接),我需要计算行数,最好是在我开始检索行之前。 我发现有两种方法可以提供我需要的信息。
方法1:
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,但是我需要知道结果中的行数,以便在向数组分配信息之前分配一个数组。 不幸的是,在我程序的这个区域,使用动态分配的容器是不可能的。
我担心会出现以下情况:
方法2是否禁止了这个问题?
另外,这两种方法中的一种会更快吗? 如果是的话,是哪一种?
最后,是否有更好的方法值得我考虑(也许是指示驱动程序使用SQLRowCount返回SELECT结果中的行数的方法?)
对于那些提问者,我使用的是Native C++和上述的SQL驱动(由微软提供)。
这里有一些想法: