问题标签 [newid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
204 浏览

tsql - 优化随机 T-SQL

第一:你觉得我随机的方式怎么样?这样是不是太穷了。。

我有一个表 TABLE_A:

id 列也可以包含字母数字值,例如“zxg-76354GH-34347”。嗯,我有 3060 条记录。

细节:

如果:

我随机化的存储过程:

我多次或“n”次调用该存储过程(我需要这样做):

问题是:我总是得到以“7”开头的 4 或 5 行,有时我得到以“5”开头的 3 或 2 行......我想避免重复。我赞赏任何建议。

谢谢。

0 投票
2 回答
6284 浏览

sql - CHECKSUM(NewId()) 每行执行多次

在查看代码时,我遇到了一些奇怪的事情,有人读到您可以使用它ABS(CHECKSUM(NewId())) % N来获取从 0 到 N-1 的随机数(因为RAND()不会每行发生),但我怀疑他们并没有真正测试他们的代码(现在用表变量简化了,实际代码做了一个TOP 1 country错误地解决了下面的问题):

执行时出现以下错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我的第一个问题是子查询如何返回多个值?为什么有时它根本没有返回任何价值?(注意不是我在 SO 提出的问题)测试者:

然而,无论执行多少次以下操作:

返回的结果总是 1,2,3(这是程序员在编写代码时使用的“测试”)

从这一切来看,我怀疑这是因为每次比较而不是每一行都重新执行它,有人可以确认这一点并提供一个很好的链接来解释这种行为,以便我可以向他指出吗?

0 投票
2 回答
1307 浏览

sql-server - NewID() - 是否有很高的机会暴露上一个/下一个 GUID

我知道 GUID 在理论上是独一无二的,碰撞的可能性非常低。但是,如果我理解正确,一些唯一性是可用的,因为它是从用于生成它的计算机上的信息中播种的,具体取决于所使用的算法。

给定一个 GUID,用户猜测表中其他 GUID 的可能性有多大?

例如,如果您的时事通讯订阅者具有取消订阅功能,您可以将其发布到 example.com/subscriber/unsubscribe/{id}

对于整数身份,这显然是一个坏主意。ID 为 1000 的用户可以通过猜测 ID 在几秒钟内取消订阅您的整个数据库。

如果 ID 列是初始化为 newid() 的 GUID,您的用户在知道自己的 ID 的情况下猜出正确 ID 的可能性有多大?

0 投票
1 回答
615 浏览

sql-server-2008 - 更新大表中的随机样本

使用 SQL Server 2012,我有一个包含 700 万行的表。PK 列是一个 GUID(COMB GUID)。我正在尝试测试查询的性能,首先需要更新数据的随机抽样,我想更改 50,000 行的列值(不是 PK)。

通过 NEWID() 选择前 50,000 个订单需要的时间太长,我认为 SQL Server 正在扫描整个表。我似乎无法为 TABLESAMPLE 找到正确的语法,它返回一个空集。

让它发挥作用的最佳方法是什么?

0 投票
3 回答
13115 浏览

sql-server - 如何使用 newid() 为存储过程变量赋值?

我正在尝试生成一个新的 GUID 并将该值分配给NewReportID. 但是,我不确定如果我替换@NewReportID过程中的任何地方newid(),它将为每一行生成一个新的 GUID。

我必须生成一个 GUID 并为 NewReportID 分配 GUID 的值?

我在变量声明中尝试过:@NewReportID varchar(50)=newid()但这给了我很多错误。

0 投票
2 回答
111 浏览

sql - 需要从一张表中随机找到一条记录,然后用这条记录加入另一张表

背景:我目前正在开发一个简单的在线测验。在用户回答了一个简单的问题后,用户就有机会通过做一些小任务来提高获胜的机会。

用户赚取的每一手都插入到单独的行中,因此当我需要找到“随机”手时,他们中奖的机会就会增加(如果我错了,请纠正我)。

来自批次表的样本数据:

这意味着 ParticipantId 为 2 的参与者拥有三手,因此与其他参与者相比,在统计上获胜的机会更大。

我需要做的:当我需要抽中奖时,我会从手数表中随机选择一个手数。在此之后,我需要找到有关获胜者的信息。

目前我在 SELECT 之后使用这个(任何关于改进 SELECT 的评论都值得赞赏),然后在我的代码中我有另一个 SELECT 与用户的信息。

我无法解决这个问题。我需要一个随机批次,并且从这个随机批次中我需要在同一个 SELECT 中获取用户的信息。有任何想法吗?

0 投票
0 回答
55 浏览

sql - sql 插入到在用户定义函数中使用 newid 的表中

可能重复:
sql server 函数中的 newid()

我必须根据查看表的函数的参数返回一个值,并且当它为空时插入该表的新记录。不幸的是,我遇到了这个有趣的错误:在函数中无效使用副作用运算符“newid”

如果我无法更改目标表,是否有解决方法?使用 SQL Server 2008 谢谢!

0 投票
1 回答
1726 浏览

sql-server - TSQL 将 newid 转换为十进制(38,0)

我想将newid()输出转换或转换为十进制(需要最小空间)

到目前为止,我这样做了:

但我收到了这个错误:

将数据类型 varchar 转换为数字时出错。

搜索了很多但感到沮丧,来这里寻求帮助。

提前谢谢了。


更新:十进制(8,0)变成十进制(38,0),仍然得到同样的错误。

0 投票
1 回答
1402 浏览

sql-server - 使用带有 CTE 的 NEWID() 生成随机的行子集会产生奇怪的结果

我正在存储过程中编写一些 SQL,以将数据集减少到我想要报告的有限随机行数。

Group报告以of开头,Users并应用过滤器来指定所需的随机行总数 ( @SampleLimit)。

为了达到预期的结果,我首先创建一个 CTE(临时表):

  • top(@SampleLimit)应用的
  • group by UserId(因为用户 ID 出现多次)
  • order by NEWID()将结果随机排列

SQL:

获得此结果集后,我将删除 UserId 是NOT IN上一步中创建的 CTE 的所有结果。

我遇到的问题是,有时我得到的结果多于指定的结果,@SampleLimit而其他时间它完全按预期工作。

我尝试分解 SQL 并在应用程序之外执行它,但我无法重现该问题。

我所做的事情有什么根本性的错误可以解释为什么我偶尔会得到更多我要求的结果吗?

为了完整性-我根据以下答案重构了解决方案:

0 投票
1 回答
106 浏览

sql - 将随机日期更新为单列(日期重复)

好的,首先我确定特定日期的日期整数,然后我需要将随机值更新到dpm_dateto列中:

询问 :

结果:

现在,我尝试dpm_dateto使用以下查询更新列:

结果:

但是,问题是dpm_dateto列中的每个不同值都使用相同的日期更新。我无法理解这一点。请帮忙。