怎样在Sql server中循环批量insert into的写法--在线急等!!!

lpf870909 2017-02-11 08:26:41
现有两张表,表一为测试记录表,是需要我往该表中批量insert into 数据的,该表没有主键,是以track_id为依据,每一个track_id对应30行的数据,这30行代表不同30个不同的测试项;表二为临时表,只有两列,共6万多行,一列是行号,一列是track_id;现在需求将表二的track_id按照每一个30行的循环insert into到表一中,需要请各位帮忙指教,请尽快回复,谢谢。
表一:

表二:
row_no TRACK_ID
1 NL01513
2 NN00001
3 NN00002
4 NN00003
5 NN00004
6 NN00005
7 NN00006
8 NN00007
9 NN00008
10 NN00009
11 NN00010
12 NN00011
13 NN00012
14 NN00013
15 NN00014
16 NN00015
17 NN00016
18 NN00017
19 NN00018
20 NN00019
21 NN00020
22 NN00021
23 NN00022
24 NN00023
25 NN00024

以下是我写的sql,但是逻辑不完整,请各位帮忙指点。

begin tran
--insert into [MT_IDENCAM_Extract].[dbo].[HIP_TEST_DETAIL_RECORD_BAK] ([TRACK_ID])
--select [TRACK_ID] from #T1
declare @i int,@j int
set @i=1
while(@i<=10)
SET @intRowCount = @@ROWCOUNT;
begin

insert into #Tab1( [RECORD_TYPE]
,[TRACK_ID]
,[RECORD_DATE]
,[TEST_CODE]
,[TEST_CHANNEL]
,[TEST_VALUE]
,[TEST_FREQUENCY]
,[PASS_FAIL]
,[TEST_VOLTAGE]
,[LOWER_LIMIT]
,[UPPER_LIMIT]
,[TEST_TIME]
,[ATTEMPTS]
,[MEASUREMENT_UNITS]
,[RETEST_FLAG]
,[FILE_INDEX]
,[UPLOAD_DATE] )
values(
select [RECORD_TYPE]
,(select [TRACK_ID] from #T1 where row_no=@i) as [TRACK_ID]
,[RECORD_DATE]
,[TEST_CODE]
,[TEST_CHANNEL]
,[TEST_VALUE]
,[TEST_FREQUENCY]
,[PASS_FAIL]
,[TEST_VOLTAGE]
,[LOWER_LIMIT]
,[UPPER_LIMIT]
,[TEST_TIME]
,[ATTEMPTS]
,[MEASUREMENT_UNITS]
,[RETEST_FLAG]
,[FILE_INDEX]
,[UPLOAD_DATE] from #Tab1)
end
set @i=@i+1
--select * from #Tab1
rollback
...全文
1099 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpf870909 2017-02-11
  • 打赏
  • 举报
回复
我表达的不是很清楚,就是往表一insert into的同时其他栏位也是要一同插入的;就30个track_id一样的还有30行的测试项数据 ;表一现在有数据,30行,结构如下
CREATE TABLE [dbo].[HIP_TEST_DETAIL_RECORD_BAK](
	[RECORD_TYPE] [varchar](20) NULL,
	[TRACK_ID] [varchar](30) NULL,
	[RECORD_DATE] [datetime] NULL,
	[TEST_CODE] [varchar](50) NULL,
	[TEST_CHANNEL] [numeric](38, 0) NULL,
	[TEST_VALUE] [numeric](38, 6) NULL,
	[TEST_FREQUENCY] [numeric](38, 6) NULL,
	[PASS_FAIL] [varchar](1) NULL,
	[TEST_VOLTAGE] [numeric](38, 6) NULL,
	[LOWER_LIMIT] [numeric](38, 6) NULL,
	[UPPER_LIMIT] [numeric](38, 6) NULL,
	[TEST_TIME] [numeric](38, 0) NULL,
	[ATTEMPTS] [numeric](38, 0) NULL,
	[MEASUREMENT_UNITS] [varchar](15) NULL,
	[RETEST_FLAG] [varchar](1) NULL,
	[FILE_INDEX] [varchar](50) NULL,
	[UPLOAD_DATE] [datetime] NULL
) ON [PRIMARY]

GO
数据如下
RECORD_TYPE	TRACK_ID	RECORD_DATE	TEST_CODE	TEST_CHANNEL	TEST_VALUE	TEST_FREQUENCY	PASS_FAIL	TEST_VOLTAGE	LOWER_LIMIT	UPPER_LIMIT	TEST_TIME	ATTEMPTS	MEASUREMENT_UNITS	RETEST_FLAG	FILE_INDEX	UPLOAD_DATE
TEST	QL03730	2016-01-06 13:25:10.000	RCU_APP_BOOST_STATUS_REQ	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:25:10.000	WRITESTATIONNUMBER	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:54.000	SSENBER	0	0.020623	2441.000000	P	3.700000	-100000000.000000	0.100000	10	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:48.000	OUTPUTPOWER	0	1.098186	2441.000000	P	3.700000	-6.000000	4.000000	6	0	DBM	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:42.000	GREENLIGHT	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:42.000	BLUELIGHT	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:42.000	MERGELKEY	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	5	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:41.000	EXITFACTESTMODEFORLED	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:41.000	ENTERLEDTESTMODE	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:41.000	REDLIGHT	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:36.000	READBTADD	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:30.000	WRITEBTADD	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:27.000	MFICHECK	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:27.000	BATTERYCAPACITY	0	4027.000000	2441.000000	P	3.700000	3850.000000	4300.000000	0	0	MV	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:27.000	FIRMWAREVERCHECKBC7	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:27.000	FIRMWAREVERCHECKD9	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:27.000	WRITEUNITSN	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:27.000	READANDVIRIFYUNITSN	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:26.000	MFBBUTTONRELEASE	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:25.000	VOLUMDOWNBUTTONRELEASE	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:25.000	MFBBUTTONPRESS	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:18.000	VOLUMDOWNBUTTONPRESS	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:17.000	VOLUMUPBUTTONRELEASE	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:16.000	VOLUMUPBUTTONPRESS	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:24:10.000	ENTERBUTTONTESTMODE	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:23:59.000	RESETBUTTONPRESS	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	11	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:23:58.000	TESTED BY LIANGHU.WU-GUOXIU	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:23:58.000	DEVICE IS MFGED FOLLOWING HIP-WSZE-TST-WI-Q007	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:23:58.000	READSTATIONNUMBER	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	0	0	NA	0	NULL	2017-02-08 08:38:42.000
TEST	QL03730	2016-01-06 13:23:58.000	UNPAIRALL	0	1.000000	2441.000000	P	3.700000	0.000000	1.000000	1	0	NA	0	NULL	2017-02-08 08:38:42.000
二月十六 2017-02-11
  • 打赏
  • 举报
回复
不知道是不是你想要的。
语句:
----测试数据
IF not object_ID('#表一') is null
drop table #表一
Go
CREATE TABLE #表一
(
track_id NVARCHAR(100) ,
otherdata NVARCHAR(100)
)
if not object_ID('#表二') is null
drop table #表二
Go
CREATE TABLE #表二
(
track_id NVARCHAR(100) ,
[No] NVARCHAR(100)
)
INSERT INTO #表二
select 'NN00001','测试1' UNION ALL
select 'NN00002','测试2' UNION ALL
select 'NN00003','测试3'
---测试数据结束
DECLARE @i INT ,
@track_id NVARCHAR(100) ,
@No NVARCHAR(100)

--利用游标
DECLARE MyCURSOR CURSOR
FOR
SELECT *
FROM #表二
OPEN MyCURSOR
---对表二每条数据循环30次,插入到表一
FETCH NEXT FROM MyCURSOR INTO @track_id, @No

WHILE ( @@fetch_status = 0 )
BEGIN
SET @i = 0
WHILE @i < 30
BEGIN
INSERT INTO #表一
VALUES ( @track_id, @no )
SET @i = @i + 1
END
FETCH NEXT FROM MyCURSOR INTO @track_id, @No
END

CLOSE MyCURSOR
DEALLOCATE MyCURSOR
----测试结果
SELECT *
FROM #表一
---删除临时表
DROP TABLE #表一,#表二


结果(表二中的每个数据,在表一中都插入30条):




二月十六 2017-02-11
  • 打赏
  • 举报
回复
不知道这次理解的对不,是按照表一3条数据测试的,不是30条。表一现有3条数据,表二有两条数据,最后的结果应该是表一原有数据加上表二track_id做为表一track_id的值和表一其他字段组合形成的数据。
语句:
----测试数据
IF not object_ID('#表一') is null
drop table #表一
Go
CREATE TABLE #表一
(
track_id NVARCHAR(100) ,
otherdata NVARCHAR(100)
)
INSERT INTO #表一
select 'QL03730','测试1' UNION ALL
select 'QL03730','测试2' UNION ALL
select 'QL03730','测试3'

if not object_ID('#表二') is null
drop table #表二
Go
CREATE TABLE #表二
(
track_id NVARCHAR(100) ,
[No] INT
)
INSERT INTO #表二
select 'NN00001',1 UNION ALL
select 'NN00002',2
----测试数据结束 表一3条数据,这三条数据同一个track_id的
---插入数据
INSERT INTO #表一
SELECT track_id ,
t.otherdata
FROM #表二
CROSS APPLY ( SELECT otherdata
FROM #表一
) t

---读取测试结果

SELECT *
FROM #表一
---删除临时表
DROP TABLE #表一,#表二


结果:




0与1之间 2017-02-11
  • 打赏
  • 举报
回复
那你多建一个表,将表一的字段属性独立出来,然后关联两个属性表插入就行 如:


WITH T1(row_no,	TRACK_ID) AS 
(  
select 1, 'NL01513' UNION ALL
select 2, 'NN00001' UNION ALL
select 3, 'NN00002' UNION ALL
select 4, 'NN00003'  UNION ALL
select 5, 'NN00004 ' 
),T2(F1,F2,F3) As
(
select 'a1', 'a2','a3' UNION ALL
select 'b1', 'b2','b3'  UNION ALL
select 'c1', 'c2','c3'
)

Select b.TRACK_ID,a.* from T2 a cross apply T1 b

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧