在单个表中更新4个布尔值字段中的1个

时间:2018-06-27 10:14:41

标签: ms-access boolean

我有一个设计不良的表,其中包含4个布尔字段,而这4个字段中只有一个需要为真。 ATM我只是试图生成用于测试的随机数据,但是我无法找到一种方法来将10000行的四个字段之一随机设置为true。 是否有任何纯SQL方式可以执行此操作,还是应该使用一些VBA代码来执行此操作? 我必须使用的数据库是Microsoft Access。

感谢您的帮助!

编辑-基于Hmax的答案

verify(...)

1 个答案:

答案 0 :(得分:0)

您可以在UPDATE SQL中使用VBA函数,如下所示:

Public Function Random1of4(varID As Variant, intIndex As Integer) As Boolean
    Static curID As Variant
    Static intVal As Integer
    If curID <> varID Then
        'new id, generate new random number from 1 to 4
        intVal = Int(Rnd * 4 + 1)
        curID = varID
    End If
    Random1of4 = intIndex = intVal
End Function

此函数使用静态变量,这些变量在函数调用之间保留值。它在内部生成1到4之间的新随机数(intVal),如果intIndex参数等于intVal,则返回True。如果参数varID更改,则生成新的intVal。
在标准模块中创建此函数,然后使用此函数创建并运行UPDATE语句-将表中的任何值传递给varID,该值对于每一行都是不同的(通常是主键),并为每个布尔字段将intIndex的值从1改为4 :

UPDATE Data
SET  TimeOut = Random1of4([ID], 1)
    ,Interaction = Random1of4([ID], 2)
    ,Responses = Random1of4([ID], 3)
    ,Manual = Random1of4([ID], 4);