我有一張表,希望更新一些行。所有的字段都不爲空。我正在做一個子查詢,我希望用非空結果更新表。在SQL Server 2005中執行更新忽略
查看下面我的最終答案: 在MySQL中,我通過執行UPDATE IGNORE來解決此問題。我如何在SQL Server 2005中完成這項工作?子查詢使用四表連接來查找要插入的數據(如果存在)。更新是針對可能有90,000個記錄的表運行的,所以我需要一個使用SQL的解決方案,而不是讓查詢數據庫的Java程序檢索結果,然後更新那些非空的字段值。
更新:我的查詢:
UPDATE #SearchResults SET geneSymbol = (
SELECT TOP 1 symbol.name FROM
GeneSymbol AS symbol JOIN GeneConnector AS geneJoin
ON symbol.id = geneJoin.geneSymbolID
JOIN Result AS sSeq ON geneJoin.sSeqID = sSeq.id
JOIN IndelConnector AS joiner ON joiner.sSeqID = sSeq.id
WHERE joiner.indelID = #SearchResults.id ORDER BY symbol.id ASC)
WHERE isSNV = 0
如果我添加 「symbol.name IS NOT NULL」 要麼在那裏我得到一個SQL錯誤。如果我按原樣運行,則會出現「向非空列添加null」錯誤。 :-(
謝謝大家,我最終找到這樣的:
UPDATE #SearchResults SET geneSymbol =
ISNULL ((SELECT TOP 1 symbol.name FROM
GeneSymbol AS symbol JOIN GeneConnector AS geneJoin
ON symbol.id = geneJoin.geneSymbolID
JOIN Result AS sSeq ON geneJoin.sSeqID = sSeq.id
JOIN IndelConnector AS joiner ON joiner.sSeqID = sSeq.id
WHERE joiner.indelID = #SearchResults.id ORDER BY symbol.id ASC), ' ')
WHERE isSNV = 0
雖然這將是最好不要在空的情況下做什麼(所以我會試着去了解其他的答案,並查看它們是否更快)將空案例設置爲空白答案也行得通,這就是它的作用
注意:用()包裝ISNULL(...)會導致真正模糊(和錯誤)錯誤。
TIA,
格雷格
你能更準確? YOu在更新語句中有一個where子句,YOu可以過濾出空行,並且您可以引用在用於更新的聯合中更新的表。 – luckyluke 2011-03-16 02:55:37
「YOu在更新語句中有where子句,YOu可以過濾出空行」How?我將在下面粘貼我的連接,但是我沒有看到在其中過濾NULL的方法,TSQL不會讓我在它外面過濾NULL。 – 2011-03-16 13:58:17
RBAR順便說一句,你應該避免, – luckyluke 2011-03-16 14:15:32