【发布时间】:2014-09-10 17:10:12
【问题描述】:
我不是最擅长使用 sql,但我尽我所能完成我的问题。我有一个“只是”表,里面填满了列( ID (PK, Identity), Char, Serv , Random )。现在我想从这个表中选择一个随机行并将其插入到表“f_WinGet”中。到目前为止,我所有的程序都很好地执行了这一步,但我总是在第二个表中得到重复项。
第一个表:84 行 第二张表:需要 84 个中的 35 个。
我尝试了许多其他方法,但总是得到相同的结果。我所有的随机程序都绑定到一个 C# 程序中的按钮。到目前为止一切正常,但我的表中总是有一些重复的行。
INSERT INTO f_TWinGet
SELECT TOP 1 Percent Char, Serv, Random
FROM ( select distinct Char, Serv, Random from dbo.just) as derived1
ORDER BY CHECKSUM(NEWID())
如果有人想我如何解决我的问题,那就太好了。我还在努力,但我得到的总是一样的结果。
【问题讨论】:
-
如果您插入相同的记录,那是因为您一直选择相同的记录。
Top 1不是随机函数,它只是选择结果集中的第一行 -
您说您只想要一行,但实际上您选择的是行中的TOP 1 PERCENT。此外,如果
dbo.just表中的行数很少,那么无论使用何种随机化,在多次查询后仍然会出现一些重复。 -
到目前为止,我理解您所说的要点。我尝试让每次单击按钮以选择 1 个随机行并将其传输到第二个表。到目前为止,您在 datagridview 中看到了添加过程,因此需要按下按钮 35x 并始终得到一个随机行但不一样,谁已经在第二个表中。我不需要第一个表中的记录,所以我正在考虑摆脱第一个表中选择的行,这样当我获取下一个时我不能两次获得同一行
-
如果你想选择随机的非重复行,你必须在数据库或程序中标记已经选择的行(从结果中排除它们),或者只是从头开始生成整个随机序列(在应用程序端可能会更好,更容易)。
标签: c# sql sql-server random rows