SYSTABLES table 中的 ROWCOUNT 字段在删除行后未更新
ROWCOUNT field in SYSTABLES table not updated after rows have been deleted
我使用 SYSTABLES 中的 ROWCOUNT 字段从使用 Oledb 的 .NET 应用程序中快速获取我所有 table 的行数(我不想使用查询来获取它,因为它需要太多大tables).
问题是:从 table 中删除行后,SYSTABLES 中的 ROWCOUNT 数字没有更新。我测试了一些命令,甚至发现 SqlTalk 中的 运行 ROWCOUNT TABLENAME 可以工作并且速度非常快,但是如果我尝试使用 OLEDB 将其作为 .NET 的查询调用它,它什么都不返回,示例代码:
using (var connection = ConnectionFactory.CreateConnection(NombreBaseModelo))
{
using (OleDbCommand cmd = connection.CreateCommand())
{
foreach (Tabla ot in LstTables)
{
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 5000;
cmd.CommandText = "ROWCOUNT " + ot.NAME;
var sRet = cmd.ExecuteScalar();
ot.ROWCOUNT = int.Parse(sRet);
}
}
}
有什么方法可以告诉 SqlBase 为 systables 中的每个 table 更新行数?
或者作为替代方案,是否有任何方法可以使此代码正常工作?
谢谢!
systables.rowcount只有在更新统计完成后才会更新,所以不保证准确,直到你执行'Update Statistics on table ' + ot.NAME;
然后就是.
快速计算行数时可能不是您想要的。
您的 'ot.NAME' 变量是否包含 table 所有者?通常是 'SYSADM.'
您是否检查了 'sRet' 中返回的值,因为它的 'int.Parse(sRet)' 可能失败了。
否则在 PK 上创建索引并执行 COUNT(*) 。如果正在使用索引,应该和 ROWCOUNT 一样快。
或者,编写一个 SQLBase 函数或存储过程,它只在本机执行 ROWCOUNT 命令和 returns 正确的计数(根据 SQLTalk),然后从您的 Net 应用程序中调用它
我使用 SYSTABLES 中的 ROWCOUNT 字段从使用 Oledb 的 .NET 应用程序中快速获取我所有 table 的行数(我不想使用查询来获取它,因为它需要太多大tables).
问题是:从 table 中删除行后,SYSTABLES 中的 ROWCOUNT 数字没有更新。我测试了一些命令,甚至发现 SqlTalk 中的 运行 ROWCOUNT TABLENAME 可以工作并且速度非常快,但是如果我尝试使用 OLEDB 将其作为 .NET 的查询调用它,它什么都不返回,示例代码:
using (var connection = ConnectionFactory.CreateConnection(NombreBaseModelo))
{
using (OleDbCommand cmd = connection.CreateCommand())
{
foreach (Tabla ot in LstTables)
{
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 5000;
cmd.CommandText = "ROWCOUNT " + ot.NAME;
var sRet = cmd.ExecuteScalar();
ot.ROWCOUNT = int.Parse(sRet);
}
}
}
有什么方法可以告诉 SqlBase 为 systables 中的每个 table 更新行数?
或者作为替代方案,是否有任何方法可以使此代码正常工作?
谢谢!
systables.rowcount只有在更新统计完成后才会更新,所以不保证准确,直到你执行'Update Statistics on table ' + ot.NAME; 然后就是.
快速计算行数时可能不是您想要的。
您的 'ot.NAME' 变量是否包含 table 所有者?通常是 'SYSADM.' 您是否检查了 'sRet' 中返回的值,因为它的 'int.Parse(sRet)' 可能失败了。 否则在 PK 上创建索引并执行 COUNT(*) 。如果正在使用索引,应该和 ROWCOUNT 一样快。
或者,编写一个 SQLBase 函数或存储过程,它只在本机执行 ROWCOUNT 命令和 returns 正确的计数(根据 SQLTalk),然后从您的 Net 应用程序中调用它