Azure SQL“select”查询未显示所有行

3
我刚使用SQLAzureMW(SQL Azure迁移向导工具)将我的SQL Server数据库迁移到了Azure SQL。一切顺利 - 所有的表都在那里,网站也可以正常运行等等。
以下是奇怪的地方:如果我对我的表执行一个简单的SELECT语句,我只会得到几行数据。我以为它们丢失了,但我的网站正在使用其中一些记录,就好像它们在那里一样。所以我用WHERE子句查询,BAM-它们出现了。为什么我的选择没有显示所有内容?这适用于我测试过的许多表。
SQL Azure On-Premise

似乎只有1000行被复制了。是否有任何设置? - radar
ID号码会有些跳跃,因为删除等原因。实际上,所有的行好像都在那里,因为应用程序正在正常使用它们,我的专注查询也可以找到它们。然而,“选择”只返回几个。这是完整的表格行(从以前的MS SQL服务器上取出)https://db.tt/mONuyhYJ - Andrew Lundgren
还没有其他人遇到这个问题吗? - Andrew Lundgren
如果您执行 select count(*) from dbo.content,会发生什么? - mga911
自从使用数据屏蔽功能后,我已经不再信任管理工作室了。如果我右键单击并点击“选择前1000个”,则会生成并运行查询,然后我会看到未屏蔽的数据。如果我修改生成的查询(例如添加回车符、删除顶部注释等),然后重新运行,我会看到预期的屏蔽数据。这真的不应该发生。尝试使用其他工具查看是否获得了您网站所显示的内容。 - Jag
3个回答

0

考虑以下 SELECT 语句:

SELECT
    SvcTimeID,
    LoginName,
    MeanSeconds,
    MedianSeconds,
    RequestCount,
    StdDevSeconds,
    SvcDate,
    CAST (TS AS INT) AS TS
FROM dbo.SvcTime
WHERE SvcDate >= @SvcDate

参数设置的位置:

cmd.Parameters["@SvcDate"].Value = DateTime.UtcNow - new TimeSpan(31, 0, 0, 0);

在 Azure Web 角色中执行该语句,返回 24 行。

现在,插入两行新数据;等待至少一分钟;再次执行该语句。最近插入的行是否出现?在我的情况下,它们没有出现。注意:数据库中 SvcDate 的默认值为 getutcdate()

将 SQL Azure 数据库从 Web 版本移动到标准 (S2) 版本,则行会神奇地出现。

这是我的理论。你遇到的问题并不是 MS SQL Management Studio 的问题,而是 SQL Azure 本身的问题,在某些情况下,相同的查询将从某个位置的缓存返回原始行,并且会错过数据库中的新行。

这已经摧毁了我对 Azure 的任何剩余信心。


很有趣。对我来说,MS SQL Management Studio是唯一出现这个问题的工具。通过Entity Framework和Visual Studio的SQL对象管理工具可以正常工作。 - Andrew Lundgren

0

我放弃了MS SQL Management Studio,改用来自Visual Studio 2012/2013的SQL Server Object Explorer。它可以正常运行并允许内联编辑数据。


0

一开始我很害怕,但我认为这有一个解释:

如果您在连接"A"中插入了一些行,并且在其他会话中找不到它们,那么可能是因为您有一个未提交的事务。默认情况下,在本地 SQL Server 中,您的第二个连接将挂起,直到事务提交或回滚为止(隔离级别为读取已提交)。

不知何故,使用相同的隔离级别,Azure 的行为不同。在某些情况下,它似乎作为快照隔离级别工作。因此,您可以从表中读取,但结果不会更新。或者锁定方式不同。

要解决此问题,请检查具有 open_tran > 0 的会话的 sysprocesses,或者只需小心提交事务。在此示例中,在您的会话"A"中运行提交即可解决问题。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接