![]() |
1
16
只有两种方法可以100%确定
使用其中一个隔离级别非常重要,因为任何其他隔离级别都允许其他客户机创建的新行在当前事务中可见。阅读上的msdn文档
|
![]() |
2
28
如果使用的是SQL Server,则在查询后可以选择@@rowcount函数(或者如果结果集的行数可能超过20亿,则使用bigrow_count()函数)。这将返回上一条语句选择的行数或受insert/update/delete语句影响的行数。
或者,如果希望在类似于方法2发送的结果中包含行计数,则可以使用over子句(请参见 http://msdn.microsoft.com/en-us/library/ms189461.aspx 1 )
使用over子句将比使用子查询获取行计数有更好的性能。使用@@rowcount将具有最佳性能,因为select@@rowcount语句不会有任何查询成本 更新以响应注释:我给出的示例将给出分区中行的-在本例中由“partition by my_table.foo”定义。每行中列的值是行的,行的值与my_table.foo的值相同。因为您的示例查询中有“where my table.foo='bar'”子句,所以结果集中的所有行都将具有与my table.foo相同的值,因此列中的值对于所有行都将相同,并且(在本例中)等于查询中的行。 下面是一个更好/更简单的示例,说明如何在结果集中的每一行中包含一列,该列是行总数。只需删除可选的分区by子句。
|
![]() |
3
3
方法2总是返回与结果集匹配的计数。 不过,我建议您将子查询链接到外部查询,以确保计数的条件与数据集的条件匹配。
|
![]() |
4
3
如果您担心自执行查询和检索结果后几毫秒内满足条件的行数可能会发生变化,那么您可以/应该在事务内部执行查询:
这将始终返回正确的值。 此外,如果使用的是SQL Server,则可以使用@@rowcount获取受上一语句影响的行数,并重定向 真实的 查询一个临时表或表变量,这样就可以完全返回所有内容,而不需要事务处理:
|
![]() |
5
1
以下是一些想法:
|
![]() |
6
1
如果您真的担心行数会在select count和select语句之间发生变化,为什么不先将行选择到临时表中呢?这样,你就知道你会同步。 |
![]() |
7
0
你为什么不把你的结果放到一个向量上呢?这样你就不用事先知道尺寸了。 |
![]() |
8
0
您可能需要考虑一个更好的模式来处理这种类型的数据。 在返回行之前,没有一个自我预检的SQL驱动程序会告诉您查询将返回多少行,因为答案可能会更改(除非您使用事务,否则事务本身会产生问题)。 行数不会改变-google代表acid和sql。 |
![]() |
9
0
|
![]() |
10
0
加上这个,因为这是谷歌在这个问题上的首要结果。 在sqlite中,我使用这个来获取行数。
|
|
Johnny T · 基于当前值的SQL合并表[重复] 4 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 4 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 4 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 4 月前 |
![]() |
Sax · 规范化Google表格(第一步) 5 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 5 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 5 月前 |