Sql-Server-2000
使用字元限制的 Web 表單使用唯一數據更新許多 (>3000) 記錄的方法
好的,正如您可能從標題的最後一部分中看出的那樣,這是一個不理想的情況。
我正在使用一個行業特定的 Web 界面軟體,我保證沒有人聽說過它,雖然它提供的海量數據輸入功能微不足道,但它確實允許我直接在其底層執行 SQL 查詢MS SQL 數據庫通過 8,000 個字元限制的 Web 表單。這是我對數據庫的最直接訪問。
我需要更新大約 3,700 條記錄中的特定欄位,每個記錄都有唯一的數據。根據這個答案,我一直在做以下事情:
UPDATE guest SET info4 = CASE guestid WHEN 12345 THEN 'BNID: 917546553' WHEN 67890 THEN 'BNID: B04695465' [etc, etc.] ELSE info4 END
(該
info4
欄位目前對於所有記錄都是空的。)在達到字元限制並且必須使用下一個數據塊執行新更新之前,我可以將大約 200 個案例放入一個查詢中。到目前為止我發現的事情:
- 不包括最後的
ELSE
聲明將清空所有不滿足案例的記錄的欄位。- 在送出之前,我得到“受影響的行:$$ # of rows in the table $$" 而不是實際獲取新數據的行數。
我知道我應該在最後放置一個
WHERE guestid IN (12345, 67890)
以避免在每一行上執行更新,但是為了避免在每個更新語句塊中執行超過我的字元限制,這將是地獄般的。碰巧的是,我目前正在從 Excel 電子表格中獲取源數據,將其全部粘貼到 Notepad++ 中,在其上執行查找/替換以插入必要的 SQL 語法,然後根據字元限制將其分塊。
所以,簡而言之,我的問題是:我是否已經盡可能地探索了這一點?有什麼大而明顯的東西我錯過了,還是我應該以完全不同的方式解決這個問題?每個案例減少字元的獎勵積分!
SET
可以簡單一點:SET info4 = 'BNID: ' + CASE guestid WHEN 12345 THEN '917546553' WHEN 67890 THEN 'B04695465' [etc, etc.] --- no ELSE here END WHERE info4 IS NULL --- and this is needed
每個案例節省 6 個字元。
如果您可以創建一個表(甚至是臨時表),您還可以使用:
--- run once CREATE TABLE #tmp ( guestid INT NOT NULL , i4 VARCHAR(200) , PRIMARY KEY (guestid) ) ; --- as many times as needed INSERT INTO #tmp VALUES (12345,'917546553'), ... (67890,'B04695465');
然後:
UPDATE guest SET info4 = 'BNID: ' + i4 FROM guest JOIN #tmp ON #tmp.guestid = guest.guestid WHERE guest.info4 IS NULL