随机遍历现有表列,为另一个表创建虚拟数据

时间:2019-09-06 17:08:08

标签: tsql

我有几个表,每个表有十行,我想要好的tsql查询在这些特定表上建立更多行。

我知道RAND函数可用于选择随机的int值。

CREATE Table Occupation
(
   Id int identity primary key,
   Designation nvarchar(50),
   country nvarchar(50)
)

Declare @Id int
Set @Id = 1

While @Id <= 10000
Begin 
   Insert Into Occupation values ('Designation - ' + CAST(@Id as nvarchar(10)),
          'Country - ' + CAST(@Id as nvarchar(10)) + ' name')
   Print @Id
   Set @Id = @Id + 1
End

但是在哪里指定,我需要它随机选择以下之一 随机或反复进行10000次,直到达到10000

PK      Designation
---------------------------------------
1       Aquarium Process Controller
2       Assistant Plant Operator
3       Boilermaker
4       Casual
5       Casual laborer
6       Casual worker
7       Cat operator
8       Cleaner
9       FLOORS CLEANER
10      G foreman

2 个答案:

答案 0 :(得分:1)

无循环,基于100%集合的解决方案。从佐哈尔·皮莱德(Zohar Peled)对理货单的评论中借鉴的想法

CREATE Table #Occupation
(
   Id int identity primary key,
   Designation nvarchar(50),
   country nvarchar(50)
);

DECLARE @designation TABLE
(   
    Designation nvarchar(50)
);

INSERT @designation (Designation) VALUES
     ('Aquarium Process Controller')
    ,('Assistant Plant Operator')
    ,('Boilermaker')
    ,('Casual')
    ,('Casual laborer')
    ,('Casual worker')
    ,('Cat operator')
    ,('Cleaner')
    ,('FLOORS CLEANER')
    ,('G foreman');

INSERT INTO #Occupation
SELECT tmp.Designation, 'Country' + CAST(NTILE(10) OVER(ORDER BY NEWID()) AS VARCHAR)
FROM
(
    SELECT TOP(10000) Designation
    FROM @designation
    CROSS JOIN [master].sys.all_columns ac1
) AS tmp;

通常用于获取“随机”记录的主要技巧是按NEWID()进行排序。另一个技巧是将记录按NTILE(10)分成10组,以获取国家/地区名称的数字。

CROSS JOIN是来自此统计表链接的一个想法。这只是通过与具有大量记录的无处不在的表交叉连接来重复记录序列的一种方法。 TOP防止交叉连接完全耗尽。

答案 1 :(得分:0)

这是您要查找的内容,首先我创建一个临时表来存储查找表的数据,并使用生成的随机数(介于1到10之间)通过PK查询临时表

var imageurl = prompt("Enter Image URL", "");
if (imageurl != null) {
    document.body.style.background = "url('" + imageurl + "') no-repeat"; // no-repeat here.
    document.body.style.backgroundSize = "cover"; // cover in a separate line.
}