iT邦幫忙

0

(#已解決)不懂stored procedure架構

  • 分享至 

  • xImage

之前並未碰過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.

這裡的理解是 前面已經有條件設定 後面直接全選就好 不知道為什麼報錯 但看來不能這樣設定..

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1

這跟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問題~ 把語法搬去其他地方測試執行就可以了

jojo461 iT邦新手 5 級 ‧ 2024-02-26 17:18:19 檢舉

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啦 也很白話....

1
一級屠豬士
iT邦大師 1 級 ‧ 2024-02-26 19:02:40
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 相同的,似乎有點多餘.

jojo461 iT邦新手 5 級 ‧ 2024-02-27 09:13:58 檢舉

上述會這樣寫是因為公司架構裡的實際格式是長這樣..
所以想知道是怎麼解釋..

delete HD_DE_DBO_SD_BILL where a=@a

insert into hd_de_dbo_sd_bill
(a
,b
,c
)
select a
,b
,c
)
from [dc_de].[dbo].[sd_bill] where a=@a


"此SQL代码将从dc_de.dbo.SD_BILL表中选择具有a等于变量@a的行的值,并将这些值插入到hd_de.dbo.SD_BILL表中。"

用了樓下大大給的網址翻譯這段語,現在得知是不同張表了..

0
純真的人
iT邦大師 1 級 ‧ 2024-02-26 22:30:48

那個是複製資料~

先刪除舊資料~在複製原始資料~

舉例
declare @ID int = '1'

delete from Tmp1 where ID = @ID

insert into Tmp1 select * from Tmp2 where ID = @ID

huangsb iT邦好手 1 級 ‧ 2024-02-27 07:04:07 檢舉

但 table name 都是 table2 ,就是多餘的

huangsb
沒錯~但我懷疑他打錯~/images/emoticon/emoticon01.gif

jojo461 iT邦新手 5 級 ‧ 2024-02-27 10:03:34 檢舉

對 打錯了..哈
因為公司裡的table會用 "_" 串一大串名稱又很像

1
huangsb
iT邦好手 1 級 ‧ 2024-02-27 07:10:01

也許你可以試試這個網站: https://www.blackbox.ai/

貼上程式碼後,可以請它解釋程式碼的用途。
預設會以英文回答,可以請它用中文回答你。

你不了解的技術也可以問它

jojo461 iT邦新手 5 級 ‧ 2024-02-27 09:42:40 檢舉

謝謝大大!

我要發表回答

立即登入回答