TSQL foreach 查询

11 浏览
0 Comments

TSQL foreach 查询

我正在尝试为我的数据库中的所有人生成随机的社会安全号码(SSN),但是我在这方面遇到了一些困难。

这是我正在使用的查询:

UPDATE tblTenant SET SSNO = (
    SELECT 
        CAST(A.A as CHAR(1)) + CAST(A.B as CHAR(1)) + CAST(A.C as CHAR(1)) + '-' +
        CAST(A.D as CHAR(1)) + CAST(A.E as CHAR(1)) + '-' +
        CAST(A.F as CHAR(1)) + CAST(A.G as CHAR(1)) + CAST(A.H as CHAR(1))+ CAST(A.I as CHAR(1))
    FROM
        (SELECT CAST(RAND() * 10 AS TINYINT) as A, CAST(RAND() * 10 AS TINYINT) as B, CAST(RAND() * 10 AS TINYINT) as C, CAST(RAND() * 10 AS TINYINT) as D, CAST(RAND() * 10 AS TINYINT) as E, CAST(RAND() * 10 AS TINYINT) as F, CAST(RAND() * 10 AS TINYINT) as G, CAST(RAND() * 10 AS TINYINT) as H, CAST(RAND() * 10 AS TINYINT) as I) as A
    );

这个查询可以正确生成一个随机的SSN,但是它只执行一次,也就是说每个人得到的SSN都是相同的。

我应该如何让每个用户生成一个新的随机SSN?

0
0 Comments

(TSQL foreach query)这个问题的出现的原因是需要对tblTenant表中的SSNO列进行更新操作。更新的方式是使用NEWID()函数生成一个唯一标识符,并将其转换为VARBINARY类型进行计算,然后将计算结果转换为VARCHAR类型,并按照特定的格式进行拼接,最后更新到SSNO列中。

解决方法是使用T-SQL的UPDATE语句,结合字符串函数和数学函数来实现对SSNO列的更新。具体的步骤如下:

1. 使用UPDATE语句来指定表名和列名,即UPDATE tblTenant SET SSNO = ...

2. 使用字符串函数RIGHT来截取计算结果的后几位数,并按照特定的格式进行拼接。例如,RIGHT('000'+CAST(ABS((CAST(NEWID() AS VARBINARY))%(1000)) AS VARCHAR(3)),3)表示将计算结果取绝对值后再取模1000,然后将结果转换为3位长度的字符串,并在前面补0。

3. 使用字符串函数和数学函数的组合来实现对计算结果的进一步处理。例如,RIGHT('00'+CAST(ABS((CAST(NEWID() AS VARBINARY))%(100)) AS VARCHAR(2)),2)表示将计算结果取绝对值后再取模100,然后将结果转换为2位长度的字符串,并在前面补0。

4. 按照类似的方式继续处理计算结果的其他部分,直至得到最终的更新值。

5. 将最终的更新值赋给SSNO列,从而实现对该列的更新操作。

通过以上的解决方法,可以实现对tblTenant表中SSNO列的更新操作。

0