首先我很喜欢Stack Overflow,你们都很有帮助..
我有一个情况,我有一个包含这样数据的表;
1 - Apple
2 - Bananna
3 - Pear
4 - Orange
5 - Plum
我可以做这样的事情;
DECLARE @C INT = 0
WHILE (@C < 3)
BEGIN
INSERT INTO tbl1 (ID,Name)
SELECT * FROM tbl2 -- THIS WILL CONTAIN 5 Rows
SET @C+=1
END
所以它最终会像这样;
1 - Apple
2 - Bananna
3 - Pear
4 - Orange
5 - Plum
1 - Apple
2 - Bananna
3 - Pear
4 - Orange
5 - Plum
1 - Apple
2 - Bananna
3 - Pear
4 - Orange
5 - Plum
现在我可以继续进行3次循环并完成,但是这个选择的脚本要重复400,000次,所以使用insert-&gt; select-&gt; insert-&gt; select等会导致大量过载。我想做的是这样的事情;
INSERT INTO tbl1
SELECT
ID,
Name,
@C = COUNT(ID)
FROM tbl2
WHERE @C < 3
我不知道这是否可行,但另一种方法是使用COMMIT,但我不知道如何有效地使用它。
答案 0 :(得分:1)
您是否尝试使用GO
作为批处理执行INSERT
语句
IF OBJECT_ID(N'dbo.T1', N'U') IS NULL
CREATE TABLE dbo.T1
([Id] int, [name] varchar(7)) ;
IF OBJECT_ID(N'dbo.T2', N'U') IS NULL
CREATE TABLE dbo.T2
([Id] int, [name] varchar(7)) ;
INSERT INTO T1
([Id], [Name])
VALUES
(1, 'Apple'),
(2, 'Bananna'),
(3, 'Pear'),
(4, 'Orange'),
(5, 'Plum')
;
INSERT INTO dbo.T2
(Id,[name])
SELECT T.Id
,T.[name]
FROM dbo.T1 T
GO 100
DROP TABLE dbo.T1
DROP TABLE dbo.T2