之前並未碰過stored procedure
認識基本sql 但下列insert into...select放在一起就不太懂
是這樣的
以下是仿公司的架構
想問的是insert into...select這段要表達的是什麼功能跟目的?
如果只是要篩出delete的值大可set條件後直接select不是嗎?@@
ALTER PROCEDURE [dbo].[practice3]
AS
BEGIN
declare @gender varchar(10)
set @gender='M'
SET NOCOUNT ON;
delete table2 where gender = @gender;
insert into table2(
id,name,age,gender
)
select id,name,gender,age from table2 where gender=@gender
END
最後exec practice3是沒報錯 新查詢select全部只剩下性別為F的內容TABLE。
另外因為有delete gender='M'的條件
嘗試把select id,name,gender,age from table2 where gender = @gender的where條件拿掉再exce就錯了
訊息 245,層級 16,狀態 1,程序 practice3,行 18 [批次開始行 0]
Conversion failed when converting the nvarchar value 'F' to data type int.
這裡的理解是 前面已經有條件設定 後面直接全選就好 不知道為什麼報錯 但看來不能這樣設定..
這跟SP有關係嗎?.... 只是單純的T-SQL吧
insert into table2(id,name,age,gender)
select id,name,gender,age from table2 where gender=@gender
上方是一個完整語句,包含了子查詢,不是分開兩個喔....
不就是新增table2中所有gender是M的內容,一次新增多筆資料
你要理解的是SQL語法不是SP問題~ 把語法搬去其他地方測試執行就可以了
INSERT INTO table_name
VALUES (value1_1, value2_2, value3_3,···),
(value2_1, value2_2, value2_3,···),
(value3_1, value3_2, value3_3,···),
······;
INSERT INTO table_name (column1, column2, column3,...)
SELECT othercolumn1, othercolumn2, othercolumn3,...
FROM othertable_name;
以上都是新增多筆資料
看起來是把values開始的值改用select欄位拋入..?
有練習過select...(select..)子查詢
但上述寫法沒有接觸過不知道大大有沒有更詳細白話的解釋?
另外有開新查詢丟insert into..select...但會報錯
Conversion failed when converting the nvarchar value 'F' to data type int.
我給的連結最底下就是解釋這個了~還蠻白話了呀
INSERT INTO table_name (column1, column2, column3,...)
SELECT othercolumn1, othercolumn2, othercolumn3,...
FROM othertable_name;
你()內部的欄位 與 SELECT欄位
數量與欄位格式都要對應上~
你這個錯誤看起來就是把varchar塞去int啦 也很白話....
insert into table2(
id,name,age,gender
)
select id,name,gender,age
有注意到 age,gender , 然後 select 部分是 gender,age 嗎?
本來就可以不列舉欄位啊....
另外這個SP 後面的 insert into ...select 若是相同table.
前面都 delete 了, 後面再insert into 相同的,似乎有點多餘.
那個是複製資料~
先刪除舊資料~在複製原始資料~
舉例
declare @ID int = '1'
delete from Tmp1 where ID = @ID
insert into Tmp1 select * from Tmp2 where ID = @ID