0

我在 MSSQL 服务器上发现了一个奇怪的现象。

假设我们有一张桌子:

CREATE TABLE [testTable]
(
     [ID] [numeric](11, 0) NOT NULL,
     [Updated] [datetime] NULL,
     PRIMARY KEY (ID)
);

我根据更新字段做了一个简单的选择:

SELECT TOP 10000 ID, Updated
FROM testTable
WHERE Updated>='2013-05-22 08:55:12.152'
ORDER BY Updated

现在到了有趣的部分:我如何在结果集中拥有双记录 - 我的意思是 2 条记录中的相同 ID 具有不同的更新值。

对我来说,更新的日期时间值似乎已更改,并且在结果集中又包含了一次。但有可能吗?

更新:我用于从 SQL 服务器下载数据的源代码:

using (SqlCommand cmd = new SqlCommand(sql, Connection) { CommandTimeout = commandTimeout })
{
    using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd))
    {
        DataTable retVal = new DataTable();
        adapter.Fill(retVal);
        return retVal;
    }
}

连接 = SqlConnection

sql = "选择 TOP 10000 ...."

4

1 回答 1

0

你的问题似乎缺乏一些细节,但这是我的想法。

我想到的第一种情况是您以某种方式选择了两次这些 ID(可能是joingroup by,...)。请手动检查您的表内部(在 MSSQL Server 中,而不是在函数或方法中)以查看是否存在重复的 ID。如果存在,则问题是您的主键设置不正确。否则,您将需要提供用于选择数据的所有相关代码以获得更多帮助。

另一种情况可能是某人或某物更改了主键,因此它同时位于IDand上Updated,只要Updated字段不匹配,就允许插入相同的 ID 两倍。

你也可以试试这个查询,看看它是否在你的上下文中得到了重复的 ID:

SELECT ID
from testTable
ORDER BY ID

我希望这有帮助。

于 2013-05-22T07:30:11.320 回答