T-SQL 将数据随机分配 示例

在工程实践中,经常会希望随机分配一些数据插入数据库,以便测试。 这里提供一个示例,利用随机数来分配数据。

在该示例中我们将 员工信息 随机分配一个 特定部门下职称(title)。

DECLARE @Stuffs TABLE (StuffName VARCHAR(50));--原始数据表

INSERT INTO @Stuffs --插入需要随机分配的数据
VALUES ('Stuff1')
    ,('Stuff2')
    ,('Stuff3')
    ,('Stuff4');

DECLARE @StuffClasses TABLE ( --员工类别表,由部门,职称组成。
    Id INT IDENTITY
    ,Department VARCHAR(50)
    ,Title VARCHAR(50)
    )

INSERT INTO @StuffTitles ( --将所有职称枚举出,并赋予一个连续的Id
    Department
    ,Title
    )
SELECT D.NAME AS Department
    ,T.NAME AS Title
FROM [dbo].[Titles] T
INNER JOIN ClientAccount..Departments D ON T.DepartmentsId = D.id

DECLARE @TitleCount INT;

SELECT @TitleCount = COUNT(*) --确定职称的总数目
FROM @StuffTitles

DECLARE @StuffMappings TABLE (
    StuffName VARCHAR(50)
    ,TempId INT
    )

INSERT INTO @StuffMappings (
    StuffName
    ,TempId
    )
SELECT StuffName
    ,(CAST((rand(checksum(newid())) * @TitleCount) AS INT) + 1) AS TempId --随机映射
FROM @Stuffs

MERGE INTO [dbo].StuffTitleMappings AS D --将数据归入到数据表中
USING (
    SELECT I.StuffName
        ,ST.Department AS DepartmentName
        ,ST.Title AS Title
        ,GETDATE() AS DateUpdated
    FROM @StuffTitles ST
    INNER JOIN @StuffMappings SM ON ST.Id = SM.TempId
    ) AS S
    ON D.StuffName = S.StuffName
WHEN MATCHED
    THEN
        UPDATE
        SET DepartmentName = S.DepartmentName
            ,D.Title = S.Title
            ,D.DateUpdated = S.DateUpdated
WHEN NOT MATCHED BY TARGET
    THEN
        INSERT (
            StuffName
            ,DepartmentName
            ,Title
            ,DateUpdated
            )
        VALUES (
            S.StuffName
            ,S.DepartmentName
            ,S.Title
            ,S.DateUpdated
            );
GO

你可能感兴趣的:(数据库,测试,Sqlserver,T-SQl)