Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用随机字符串值更新列中的所有行以进行测试_Sql_Tsql_Sql Server 2016 - Fatal编程技术网

Sql 使用随机字符串值更新列中的所有行以进行测试

Sql 使用随机字符串值更新列中的所有行以进行测试,sql,tsql,sql-server-2016,Sql,Tsql,Sql Server 2016,使用用户定义的generateString()函数,我使用以下SQL创建随机varchar 当@char有一个排除字符'0:@O[]``^\/'然后,如果条件wll失败并且@len不会递减,那么在下一个循环中,也将使用相同的@random值,并将生成相同的@char,因此它将进入无限循环 将@random变量的初始化移动到循环中,同时在每个循环中生成新的随机值 DECLARE @random DECIMAL(18,18) while @len > 0 begin SELECT

使用用户定义的
generateString()
函数,我使用以下SQL创建随机
varchar


@char
有一个排除字符
'0:@O[]``^\/'
然后,如果条件wll失败并且
@len
不会递减,那么在下一个循环中,也将使用相同的
@random
值,并将生成相同的
@char
,因此它将进入无限循环

@random
变量的初始化移动到
循环中,同时在每个循环中生成新的随机值

DECLARE @random DECIMAL(18,18) 

while @len > 0 begin
    SELECT @random =  dbo.RandFn()
    select @char = char(round(@random * 74 + 48, 0))

    if charindex(@char, @exclude) = 0 begin
        set @output = @output + @char
        set @len = @len - 1
    end
end

您对random
varchar
数据有任何限制,比如它应该是8个字符,或者至少应该有一个符号之类的吗?没有,我只需要字段中的random varchar数据。现在列中的所有内容都为NULL,不适合测试。然后只需使用
Newid()
。类似于这样的
updatedbo.Inci SET SerialText=newid()
确实有效。非常感谢。尽管如此,我仍然很好奇,如果我需要特定的或更“真实”的数据,如何让原始的post语句发挥作用。这很接近,但它只是更新列以包含1个字符,而不是整个“字符串”。我想这里还发生了其他事情。它只运行了14分钟,没有停止的迹象。我只更新了82条记录,所以老实说不会花那么长时间吧?谢谢!事实上我让它工作了。还必须将“ALTER FUNCTION generateString()RETURNS VARCHAR”设置为“RETURNS VARCHAR(50)”,这样当我在update语句中使用该函数时,它会给我不止一个字符。
UPDATE dbo.Inci
SET SerialText = dbo.generateString()
DECLARE @random DECIMAL(18,18) 

while @len > 0 begin
    SELECT @random =  dbo.RandFn()
    select @char = char(round(@random * 74 + 48, 0))

    if charindex(@char, @exclude) = 0 begin
        set @output = @output + @char
        set @len = @len - 1
    end
end