發表文章

目前顯示的是 11月, 2025的文章

🧾【教學】如何安全又穩定地使用 BULK INSERT 匯入大型 CSV / TSV 到 SQL Server?常見錯誤與解法全解析!

📌 前言:為什麼我們選擇 BULK INSERT? 在企業中常見的情境是,某些部門會匯出成千上萬筆資料的 CSV 或 TSV 檔案,而我們需要快速地匯入到 SQL Server 中進行分析或報表製作。這時候, BULK INSERT 是一個快速又有效率的選項。 🧱 Step 1:先建立「中繼表」接收原始資料 為了避免型別錯誤,我們建立一個 staging table,所有欄位都先用 nvarchar(4000) : CREATE TABLE dbo.MyData_stg ( ID nvarchar( 4000 ), Name nvarchar( 4000 ), Score nvarchar( 4000 ), CreateDate nvarchar( 4000 ) ); 這樣就不會因為欄位格式不合而導致匯入失敗。 🧾 Step 2:CSV ➜ TSV,避免欄位中有逗號破壞欄位格式 很多 CSV 欄位中含有逗號,會導致欄位錯位。可使用 PowerShell 轉成 Tab 分隔檔(TSV): $src = "D:\Data\source.csv" $dst = "D:\Data\converted.tsv" # 若資料夾不存在,先建立 New-Item -Path "D:\Data" -ItemType Directory -Force Import-Csv $src | Export-Csv $dst -Delimiter "`t" -NoTypeInformation -Encoding UTF8 🧮 Step 3:使用 BULK INSERT 匯入 TSV BULK INSERT dbo.MyData_stg FROM 'D:\Data\converted.tsv' WITH ( FIRSTROW = 2 , FIELDTERMINATOR = '\t' , ROWTERMINATOR = '\...

🧾新手也能懂的 Excel 批次合併:用 Python 一鍵把多個檔案變成一個活頁簿(每檔一張工作表)

1) 這篇文章要解決什麼問題? 你的同事寄了十幾個甚至幾百個 Excel 報表,你想「把它們合成一個檔案」、每個來源檔變成 同一本活頁簿中的一張工作表 。手動複製貼上很花時間,而且容易出錯。 我們要做的是:用一支小工具,自動化完成這件事。 2) 需要準備什麼(環境與觀念) Python 3.9+ (或相近版本) 套件 : pandas (資料處理)、 openpyxl (寫出 .xlsx) 如果要讀更舊的 .xls ,可另外裝 xlrd 如果要讀 .xlsb ,可另外裝 pyxlsb 基本觀念 : 資料夾 :把要合併的 Excel 檔放在同一個資料夾。 工作表名稱限制 (Excel):不可含 []:*?/ \ ,最多 31 個字,且同一本活頁簿中不可重複。 安裝套件(命令列): pip install pandas openpyxl # (選用) pip install xlrd pyxlsb 3) 流程概覽:電腦到底會做哪些事? 找到資料夾中的 Excel 檔 (可用萬用字元過濾,如 *.xlsx )。 替每個檔決定要讀哪張工作表 (第一張,或指定名稱)。 清理工作表名稱 (符號/長度/重名)。 寫入同一本輸出活頁簿 (每個來源檔→一張工作表)。 (選配) 封存已處理過的來源檔 ...

🔧修掉 Python 「假警告」與資料庫連線雷:給完全不懂也能跟上的工程師筆記

為什麼你會看到一堆紅字,卻其實不是錯誤? 很多人在 Windows 上跑 Python 連資料庫(例如 SQL Server)時,螢幕上常出現兩種訊息: SyntaxWarning: invalid escape sequence '\d' RemovedIn20Warning: Deprecated API features detected! (SQLAlchemy 2.0 相關) 先別慌!這兩個多半不是「炸掉的錯誤」,而是 提醒你有更好的寫法 。下面用超白話把它們一次講清楚,附上安全做法與完整步驟。文內所有範例都 重新編寫 (避免任何隱私資訊),你可以放心複製改造。 Part A:為什麼會有 SyntaxWarning: invalid escape sequence '\d' 發生原因(一句話) 你在 一般字串 寫了正規表示式,像 "(\d+)" 。Python 看到 \d 以為是跳脫字元(例如 \n ),結果「不認識」,就發出 SyntaxWarning 。 正確解法(兩種,擇一) ✅ 推薦:原始字串 (在字串前加 r ) # 壞例子(會出現 SyntaxWarning): pattern = re. compile ( "user:(\d+)$" ) # 好例子(原始字串): pattern = re. compile ( r"user:(\d+)$" ) 或,用雙反斜線 pattern = re. compile ( "user:(\\d+)$" ) 什麼時候別用原始字串? 幾乎都能用;只有當字串最後一個字元是單一的 \ 時不行(很少見)。 Part B:為什麼會有 RemovedIn20Warning (SQLAlchemy 2.0) 發生原因(一句話) 你用的是 SQLAlchemy 1.4,但寫法是 1.x 的舊 API(例如 engine.execute("......

🧾【教學】如何正確將 Excel/CSV 資料匯入 SQL Server:避免 4860、4863、4866 錯誤全攻略!

✨為什麼你會看到這篇文章? 你是否試圖將一份 .csv 或 .tsv 的資料檔匯入 SQL Server,但卻不斷被神秘的錯誤代碼阻擋,例如: 訊息 4860:無法大量載入,找不到檔案 訊息 4863:資料轉換錯誤(截斷) 訊息 4866:資料行對資料行 1 而言太長 放心,你不是孤單的,這是 SQL Server 在處理「檔案路徑、編碼、欄位數」錯誤時的常見行為。 這篇文章將用軟體工程師的角度, 全流程示範如何把 CSV/TSV 成功匯入 SQL Server ,並避免所有常見錯誤。 🧨 錯誤訊息快速解碼 錯誤代碼 發生原因 4860 檔案路徑錯誤,或 SQL Server 沒有權限讀取 4863 欄位長度不符,資料被截斷(通常是編碼或分隔符錯誤) 4866 整行資料被塞到一欄,導致欄位爆長 7301 / 7330 資料連結提供者(BULK)異常,多為上面錯誤連帶引起 🧩 根本解法原則(工程師思維) SQL Server 看不到你本機的檔案 → 必須把檔案放到「SQL Serv...

🧩Java JAR 執行後找不到輸出檔?一篇搞懂:從 -jar 正確用法到 properties 與工作目錄完整實戰

  摘要(SEO) 很多人用 java -jar 跑完轉檔工具後,主控台明明印出「convert … to … .txt」,卻在磁碟裡找不到任何 .txt 。本文用 軟體工程師 的角度、用最白話的方式,帶你一步步確認 JAR 的正確執行方式 、 輸出檔可能落點 (目前工作目錄、來源同層或 properties 指定資料夾)、以及 如何檢視/更新 JAR 內的 *.properties 設定檔 。所有範例皆為匿名、通用化的路徑與檔名,可直接套用在你的環境。 你遇到的典型狀況 指令跑了、主控台有輸出,但 找不到 .txt 。 曾把 輸出路徑寫在 *.properties ,但實際上 不生效 。 不確定程式到底讀的是 外部 properties 檔還是 打包在 JAR 裡 的那一份。 關鍵觀念先記住: -jar 必須有減號。 很多工具會把檔案寫到 目前工作目錄 (CWD) 或 來源檔同資料夾 。 你改的 properties , 要確保就是程式真正讀到的那一份 。 一、正確執行 JAR(先把開場白錯誤拿掉) 1) -jar 不能少減號 # 正確(PowerShell) java -jar .\converter.jar :: 正確(cmd) java -jar converter.jar 下成 java .jar converter.jar 會讓 Java 以為「 .jar 是類別名稱」,導致「找不到或無法載入主要類別 .jar」。 2) 驗證 Java 是否可用 java -version 看到版本號代表 OK。 二、輸出到底會寫在哪?三個最常見落點 目前工作目錄 (CWD) :你下指令的那個資料夾。 來源檔同資料夾 :很多轉檔器會把 .txt 丟在被轉檔的檔案旁邊。 *.properties ...

🧩Java .jar 執行後輸出檔到底存在哪?給完全不懂也能看懂的圖文教學(含 CMD/PowerShell 範例)

  TL;DR(先講重點) 當你在 Windows 以 java -jar xxx.jar 執行工具、而日誌裡寫著 convert <輸入完整路徑> to <輸出檔名>.txt (注意:右邊只有檔名沒有路徑)時—— 輸出檔 通常會被寫到 你執行指令當下的「目前工作目錄」 (Current Working Directory, CWD)。 如果工具本身有設定「輸出目錄」或把輸出放在「來源檔同層」,那就改去那些位置找。 為什麼「輸出檔不見了」? 很多轉檔或資料處理的 .jar 工具, 若沒有明確指定輸出路徑 ,就會把結果寫到 目前工作目錄 。 你可以把「目前工作目錄」想成:「 我現在站在的資料夾 」。 在命令列(CMD/PowerShell)輸入指令時, 站在哪 就 存到哪 。 若日誌顯示 to example.stdf.gz.txt (只有檔名),幾乎可判定是寫到目前工作目錄。 快速辨識:這種日誌代表什麼意思? 以下是 改寫過、純示意 的日誌格式( 與真實專案無關 ): convert E:\ data \inputs\sample\ABC123_20250101_120000.stdf to ABC123_20250101_120000.stdf.txt convert E:\ data \inputs\sample\DEF456_20250102_090000.stdf.gz to DEF456_20250102_090000.stdf.gz.txt convert <輸入完整路徑> :讀的是哪個來源檔。 to <輸出檔名>.txt : 只有檔名、沒有路徑 → 大多寫到 目前工作目錄 。 立刻查到檔案:最實用的兩段指令 方法 A:先看你當下站在哪(目前工作目錄) CMD: echo 目前工作目錄是:%cd% dir *.txt PowerShell: Get-Location Get-Chi...