Tsql 随机循环现有表列,为另一个表创建虚拟数据
我有两个表,每个表有十行,我想要好的tsql查询在这些特定的表上构建更多的行 我知道RAND函数用于选择随机整数值Tsql 随机循环现有表列,为另一个表创建虚拟数据,tsql,Tsql,我有两个表,每个表有十行,我想要好的tsql查询在这些特定的表上构建更多的行 我知道RAND函数用于选择随机整数值 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 Occup
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
下面是您要查找的内容,首先我创建一个临时表来存储查找表的数据,并使用1到10之间生成的随机数通过PK查询临时表
CREATE TABLE #tmpData (PK INT, Designation VARCHAR(64))
INSERT INTO #tmpData (PK, Designation)
VALUES (1, 'Aquarium Process Controller') -- add the rest of the records below (PK 2 to 10)
CREATE Table Occupation
(
Id int identity primary key,
Designation nvarchar(50),
country nvarchar(50)
)
Declare @Id int
Set @Id = 1
DECLARE @Designation AS VARCHAR(64)
While @Id <= 10000
Begin
SET @Designation =
(SELECT Designation
FROM #tmpData
OUTER APPLY (SELECT RAND()*(11-0)+0) CxA(RandomNumber) -- creates a random number between 1 and 10
WHERE PK = CxA.RandomNumber)
Insert Into Occupation values ( @Designation ,
'Country - ' + CAST(@Id as nvarchar(10)) + ' name')
Print @Id
Set @Id = @Id + 1
End
无环、100%基于集合的解决方案。借鉴Zohar Peled对理货表的评论: 创建表占用 Id int标识主键, 名称nvarchar50, 国家nvarchar50 ; 声明@指定表 名称nvarchar50 ; 插入@指定值 “水族箱过程控制器” “工厂助理操作员” “锅炉匠” “休闲” “临时工” “临时工” “Cat操作员” “清洁剂” “地板清洁剂” “G工头”; 加入职业 选择tmp.名称“国家”+新ID追加订购的CASTNTILE10作为VARCHAR 从…起 选择TOP10000名称 从@指定 交叉联接[master].sys.all_列ac1 作为tmp; 通常用于获取“随机”记录的主要技巧是按NEWID排序。另一个技巧是将记录按NTILE10分成10组,以获得国家名称的数字
交叉连接是这个理货表链接的一个想法。这只是一种通过将记录序列与具有大量记录的无处不在的表交叉连接来重复记录序列的方法。TOP可防止交叉连接完全耗尽。在您的问题中,我只看到一个表格。看看杰夫·摩登的
CREATE TABLE #tmpData (PK INT, Designation VARCHAR(64))
INSERT INTO #tmpData (PK, Designation)
VALUES (1, 'Aquarium Process Controller') -- add the rest of the records below (PK 2 to 10)
CREATE Table Occupation
(
Id int identity primary key,
Designation nvarchar(50),
country nvarchar(50)
)
Declare @Id int
Set @Id = 1
DECLARE @Designation AS VARCHAR(64)
While @Id <= 10000
Begin
SET @Designation =
(SELECT Designation
FROM #tmpData
OUTER APPLY (SELECT RAND()*(11-0)+0) CxA(RandomNumber) -- creates a random number between 1 and 10
WHERE PK = CxA.RandomNumber)
Insert Into Occupation values ( @Designation ,
'Country - ' + CAST(@Id as nvarchar(10)) + ' name')
Print @Id
Set @Id = @Id + 1
End