當前位置:首頁 » 編程語言 » 一條sql插入多條數據
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

一條sql插入多條數據

發布時間: 2023-03-12 00:08:36

⑴ 求sql怎麼一次用insert 添加多條數據

--一條insert只能插入一行數據,除非你有一個相同數據類型的表需要復製表數據批量插入可以使用
InsertintoTable2(field1,field2,...)selectvalue1,value2,...fromTable1
--要求目標表Table2必須存在,由於目標表Table2已經存在,所以我們除了插入源表Table1的欄位外,還可以插入常量。

⑵ Oracle資料庫,一條SQL語句插入多行數據

按照你現有的表創建歷史數據:

createtablekhqfbd_1
(khnint,
khqxhint,
khmcvarchar2(20),
qsrqvarchar2(8),
jsrqvarchar2(8),
bzvarchar2(100));

insertintokhqfbd_1values(2024,1,'第一季度','20240101','20240331','1');
insertintokhqfbd_1values(2024,2,'第二季度','20240401','20240630','1');
insertintokhqfbd_1values(2024,3,'第三季度','20240701','20240930','1');
insertintokhqfbd_1values(2024,4,'第四季度','20241001','20241231','1');
commit;

執行:

declare
v_yearint;
begin
selectmax(khn)intov_yearfromkhqfbd_1;
insertintokhqfbd_1
values
(v_year+1,1,'第一季度',v_year+1||'0101',v_year+1||'0331','1');
insertintokhqfbd_1
values
(v_year+1,2,'第二季度',v_year+1||'0401',v_year+1||'0630','1');
insertintokhqfbd_1
values
(v_year+1,3,'第三季度',v_year+1||'0701',v_year+1||'0930','1');
insertintokhqfbd_1
values
(v_year+1,4,'第四季度',v_year+1||'1001',v_year+1||'1231','1');
commit;
end;

執行後結果:

⑶ 如何使用一條SQL語句,插入多條記錄

無可能 除非寫存儲過程 做一個循環 這個 你要想一下 你用的應該是關系型資料庫吧 那麼關系型資料庫就必須要求表裡面有主鍵約束以保證每條記錄不會重復 當然也有些表是沒主鍵的 這樣的設計我覺得不能納入討論范圍 然後"一個查詢語句插入多條記錄" 這個命題得出一個推論 就是你不能設變數 就算可以設變數 但是只有一條語句 變數還是不能賦不同的值 那麼得出你插入的多條數據都是重復的 這就違反了主鍵約束 也違反了第一範式的要求了。。。我覺得三大範式 你可以不用太苛刻的遵守 但是第一範式我認為是底線了 因為如果連第一範式都不遵守的話 那麼就已經顛覆了關系型資料庫的數學模型了。。。
其實這個問題我曾經也考慮過 因此看些書 結合平時的工作 最後就是按照上面這樣說服了自己。。。。

⑷ 如何用SQL語句向一個表中插入多行記錄

insert一般是用來給表插入一條指定的列值的,但是,insert還存在另一種形式,可以利用它將一條select語句的結果插入表中。

這就是所謂的insert select,顧名思義,它是由一條insert語句和一條select語句組成的。假如你從另一張表中合並客戶列表到你的Custumers表,不需要每次讀取一行,然後再將它用insert插入,可以如下進行:

insert into Custumer(cust_id,

cust_cintact,

cust_name,

cust_email,

cust_address,

cust_country)

select cust_id,

cust_cintact,

cust_name,

cust_email,

cust_address,

cust_country

from CustNew;

(4)一條sql插入多條數據擴展閱讀

insert select中的列名為簡單起見,這個例子在insert和select語句中使用了相同的列名,但是,不一定要求列名匹配。事實上,DBMS甚至不關心select返回的列名,它使用的是列的位置。

因此,select中的第一列(不管其列名)將用來填充表列中的指定的第一個列,第二列將用來填充表列中指定的第二個列,如此等等。

⑸ 求sql怎麼一次用insert 添加多條數據

可以一次加入多條記錄。
在SQL
SERVER里邊,多個INSERT
語句之間,用分號(;)或者空格,隔開,這樣資料庫就認為你是在進行多條SQL語句的插入操作。就可以插入多條了。

⑹ 求sql怎麼一次用insert 添加多條數據

如果是sqlserver支持多sql語句,你可以將所有的insert拼接成字元串,一起發送到伺服器

或者你可以批量插入另一個數據集的數據
insert xxx(id,name) select id,name from xxx

⑺ 求sql怎麼一次用insert 添加多條數據

用insert 添加多條數據:
insert into 表1(列名) select 列名 from 表2 --主鍵要自增
對於主鍵不自增的也可以處理,如:建一張臨時表,主鍵ID自增,然後取出要插入有的最大值,把最大值加到臨時表ID上再用:insert into 表1(ID,列名) select ID,列名 from 表2
insert into persons
(id_p, lastname , firstName, city )
values
(200,'haha' , 'deng' , 'shenzhen'),
(201,'haha2' , 'deng' , 'GD'),
(202,'haha3' , 'deng' , 'Beijing');

⑻ 如何一次插入多條記錄的SQL語句

在使用SQL資料庫的時候,我們也許會需要一次像資料庫中添加多條記錄,那麼我們可以使用SQL語句來實現,該語句具體如下:x0dx0a--添加一條記錄 x0dx0aINSERT INTO tableName(col1,col2,col3) VALUES (1,2,3) x0dx0a x0dx0a--添加多條記錄 x0dx0aINSERT INTO tableName(col1,col2,col3) x0dx0aSELECT 3,4,5 x0dx0aUNION ALL x0dx0aSELECT 6,7,8 x0dx0a x0dx0a--從另外的一張表中讀取多條數據添加到新表中 x0dx0aINSERT INTO tableName(col1,col2,col3) x0dx0aSELECT a,b,c FROM tableA x0dx0a x0dx0a--從其他的多張表中讀取數據添加到新表中 x0dx0aINSERT INTO tableName(col1,col2,col3) x0dx0aSELECT a,b,c FROM tableA WHERE a=1 x0dx0aUNION ALL x0dx0aSELECT a,b,c FROM tableB WHERE a=2 x0dx0a上邊代碼中的into都可以省略!x0dx0a上邊代碼中的union all如果換成union,則相同記錄只插入一次,不會重復插入。x0dx0a另外一種方法是SQL Server2008特有的,所以,如果你不是SQL Server2008,就不能使用這種方法了。 x0dx0aINSERT INTO MyTable(ID,NAME)VALUES(7,顛'),(8,顜'),(9,顝')x0dx0acreate table [TEST]x0dx0a(x0dx0a [NUM_ID] int primary keyx0dx0a)x0dx0agox0dx0adeclare @temp intx0dx0aset @temp=1;x0dx0awhile @temp<=1000000 x0dx0abeginx0dx0ainsert into [TEST]([NUM_ID]) values(@temp)x0dx0aset @temp=@temp+1;x0dx0aendx0dx0agox0dx0a----------------------------------------------------------x0dx0a--試試下面的方法x0dx0a--2005x0dx0aDECLARE @n AS BIGINT;x0dx0aSET @n = 1000000;x0dx0aWITH Base ASx0dx0a(x0dx0a SELECT 1 AS nx0dx0a UNION ALLx0dx0a SELECT n + 1 FROM Base WHERE n < CEILING(SQRT(@n))x0dx0a),x0dx0aExpand ASx0dx0a(x0dx0a SELECT 1 AS cx0dx0a FROM Base AS B1, Base AS B2x0dx0a),x0dx0aNums ASx0dx0a(x0dx0a SELECT ROW_NUMBER() OVER(ORDER BY c) AS nx0dx0a FROM Expandx0dx0a)x0dx0aSELECT n FROM Nums WHERE n <= @nx0dx0aOPTION(MAXRECURSION 0);x0dx0a--2x0dx0aCREATE FUNCTION dbo.fn_nums(@n AS BIGINT) RETURNS WITHx0dx0a L0 AS(SELECT 1 AS c UNION ALL SELECT 1),x0dx0a L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),x0dx0a L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),x0dx0a L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),x0dx0a L4 AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),x0dx0a L5 AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),x0dx0a Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L5)x0dx0a SELECT n FROM Nums WHERE n <= @n;x0dx0aGOx0dx0a--2000 這個會比前兩個慢,但是前兩個2000不能用x0dx0aCREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);x0dx0aDECLARE @max AS INT, @rc AS INT;x0dx0aSET @max = 1000000;x0dx0aSET @rc = 1;x0dx0aINSERT INTO Nums VALUES(1);x0dx0aWHILE @rc * 2 <= @maxx0dx0aBEGINx0dx0a INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;x0dx0a SET @rc = @rc * 2;x0dx0aENDx0dx0aINSERT INTO dbo.Numsx0dx0a SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max; x0dx0a--------------------------------------------------------------------------------------------------------

⑼ sql 一次插入多條記錄

在使用sql資料庫的時候,我們也許會需要一次像資料庫中添加多條記錄,那麼我們可以使用sql語句來實現,該語句具體如下:
--添加一條記錄
insert
into
tablename(col1,col2,col3)
values
(1,2,3)
--添加多條記錄
insert
into
tablename(col1,col2,col3)
select
3,4,5
union
all
select
6,7,8
--從另外的一張表中讀取多條數據添加到新表中
insert
into
tablename(col1,col2,col3)
select
a,b,c
from
tablea
--從其他的多張表中讀取數據添加到新表中
insert
into
tablename(col1,col2,col3)
select
a,b,c
from
tablea
where
a=1
union
all
select
a,b,c
from
tableb
where
a=2
上邊代碼中的into都可以省略!
上邊代碼中的union
all如果換成union,則相同記錄只插入一次,不會重復插入。
另外一種方法是sql
server2008特有的,所以,如果你不是sql
server2008,就不能使用這種方法了。
insert
into
mytable(id,name)values(7,'003'),(8,'004'),(9,'005')
create
table
[test]
(
[num_id]
int
primary
key
)
go
declare
@temp
int
set
@temp=1;
while
@temp<=1000000
begin
insert
into
[test]([num_id])
values(@temp)
set
@temp=@temp+1;
end
go
----------------------------------------------------------
--試試下面的方法
--2005
declare
@n
as
bigint;
set
@n
=
1000000;
with
base
as
(
select
1
as
n
union
all
select
n
+
1
from
base
where
n
<
ceiling(sqrt(@n))
),
expand
as
(
select
1
as
c
from
base
as
b1,
base
as
b2
),
nums
as
(
select
row_number()
over(order
by
c)
as
n
from
expand
)
select
n
from
nums
where
n
<=
@n
option(maxrecursion
0);
--2
create
function
dbo.fn_nums(@n
as
bigint)
returns
table
as
return
with
l0
as(select
1
as
c
union
all
select
1),
l1
as(select
1
as
c
from
l0
as
a,
l0
as
b),
l2
as(select
1
as
c
from
l1
as
a,
l1
as
b),
l3
as(select
1
as
c
from
l2
as
a,
l2
as
b),
l4
as(select
1
as
c
from
l3
as
a,
l3
as
b),
l5
as(select
1
as
c
from
l4
as
a,
l4
as
b),
nums
as(select
row_number()
over(order
by
c)
as
n
from
l5)
select
n
from
nums
where
n
<=
@n;
go
--2000
這個會比前兩個慢,但是前兩個2000不能用
create
table
dbo.nums(n
int
not
null
primary
key);
declare
@max
as
int,
@rc
as
int;
set
@max
=
1000000;
set
@rc
=
1;
insert
into
nums
values(1);
while
@rc
*
2
<=
@max
begin
insert
into
dbo.nums
select
n
+
@rc
from
dbo.nums;
set
@rc
=
@rc
*
2;
end
insert
into
dbo.nums
select
n
+
@rc
from
dbo.nums
where
n
+
@rc
<=
@max;
--------------------------------------------------------------------------------------------------------