我想弄清楚如何創建一個查詢/tsql,它可以將值從 csv 檔案匯入到現有表中。這是 csv 記錄很少的例子:
LastName, FirstName, Supervisor
Michael, Scott, John Smith
Joe, Martin, Michael Scott
而我在 SQL Employee 表中的現有表 所有列都已經有除 SupervisorId 之外的值(supervisorId 是指向同一個表的主鍵 - EmployeeId 的外鍵)
我想要實作的是撰寫一個腳本,該腳本將從 csv 檔案中獲取主管名稱,在員工表中搜索具有給定主管名稱(名字 姓氏)的行,獲取他的 EmployeeId 并將其插入到他的下屬 SupervisorId 列中。
是否可以創建這樣的腳本?到目前為止,我只找到了簡單的查詢,例如:
BULK INSERT Employee
FROM 'D:\Employees.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
)
但它甚至還沒有接近我想要實作的目標
uj5u.com熱心網友回復:
正如@Alex 所指出的,解決此問題的最佳方法是通過幾個步驟。
第 1 步:將資料放入 #temp 表中。
第 2 步:從 Employee 表查找加載的資料。
第 3 步:使用您發現的新資訊更新 Employee 表!
注意:根據資料的大小,您可能希望向臨時表添加索引。此外,在名稱上加入還有可能需要應對的行擴展。
-- Step 1:
drop table if exists #tmp_Employee_Data;
BULK INSERT #tmp_Employee_Data
FROM 'D:\Employees.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
)
-- Step 2: Using the temp table you can do your additional work.
drop table if exists #tmp_EmpSup;
select t.*, e.EmployeeId as SuperviserId
into #tmp_EmpSup
from Employee e join #tmp_Employee_Data t
on e.FirstName ' ' e.LastName = t.Supervisor
-- Step 3: Update your Table
update e
set e.SupervisorId = t.SuperviserId
from Employee e join #tmp_EmpSup t
on e.FirstName = t.FirstName
and e.LastName = t.LastName
祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384637.html
標籤:sql sql-server 查询语句
