簡體   English   中英

SQL INSERT INTO TABLE 與動態和 static 列值

[英]SQL INSERT INTO TABLE with dynamic and static column values

名為“代碼類型”的目標表:

合同編號 白蟻 代碼1 代碼2 代碼3 創建ID 創建日期 更新id 最后更新
合同ID1 終端1 靜止的# 靜止的# 一個 靜態名稱 獲取日期() 靜態名稱 獲取日期()
合同ID1 終端1 靜止的# 靜止的# 靜態名稱 獲取日期() 靜態名稱 獲取日期()
合同ID2 termid2 靜止的# 靜止的# 一個 靜態名稱 獲取日期() 靜態名稱 獲取日期()
合同ID2 termid2 靜止的# 靜止的# 靜態名稱 獲取日期() 靜態名稱 獲取日期()

你好呀。 使用 SSMS 17。

好的,所以我正在努力有效地實現的是一個查詢,它將將行插入到上面的表格式中,但基於連接的數據,以根據其他兩個表的條件動態更改 contractid 和 termid; 以及從 code3 的 20 個選項的已知列表中插入值。

ContractID 將通過基於 contract_name 的 where 條件從“合同”表中找到。 contract_name 僅存在於此“合同”表中。

TermID 將通過基於 term_name 的 where 條件找到,並且必須鏈接到上面的 contractID。 TermID 和 term_name 僅存在於“term”表中,在 contractID 上鏈接到“contract”

對於這兩個值,簡單的 select 將是:

select c.contractid, t.termid
from contract c
left join term t on t.contractid = c.contractid and t.term_name like 'term name%'
where c.contract_name like 'contract name%'

code1 和 code2 是已知值。 code3 有 20 個值,每個值都需要插入到這個“代碼類型”表中,它們都是數字和字母字符(不是所有AZ、1-0,而是一個只有 20 個的較小列表)。 重申,在 contractid1 中的 termid1 需要為所有離散的 20 個 code3 值(A、B、C...Z、1、2...0)輸入行,其中 static 字段是已知的,但 contractid 和 termid 是動態的根據上述條件插入。 值的 rest 也是已知的 static 值或 getdate()。

20 個不同的代碼存在於第 4 個表中,我們將其稱為“code3values”,因此我想可以在解決方案中從該表中提取它們以循環通過 code3 輸入。

我通常會做的是將上述 select 導出到 Excel 中,然后為每種可能性手動創建一個“插入”行,例如非常無聊:

insert into codetypes values('contractid1','termid1','1','2','A','myname',getdate(),'myname',getdate())
insert into codetypes values('contractid1','termid1','1','2','B','myname',getdate(),'myname',getdate())

這次數據太大了,我想學習一種更高效/更有創意的方法。

我認為下面是一個不錯的開始,但我仍然需要一種方法來循環瀏覽 20 個 code3 值選項。

insert into codetypes
(contractid, termid, code1, code2, code3, createid, createdate, updateid, lastupdate)

select c.contractid, t.termid, '1','2','A','name',getdate(),'name',getdate()
from term t
left join contract c on c.contractid = t.contractid
where t.term_name like 'term name%'
and c.contract_name like 'contract name%'

在發布之前我沒有花足夠的時間,但這是我想出的答案:

insert into codetypes
    (contractid, termid, code1, code2, code3, createid, createdate, updateid, lastupdate)
select
    c.contractid, t.termid, '1', '2', f.code3, 'name', getdate(), 'name', getdate()
from contract c
    left join term t on t.contractid = c.contractid
    join code3values f on f.code3 != ''
where c.contract_name like 'contract name%'
    and t.term_name like 'term name%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM