У меня есть таблица, в которой я хочу обновить некоторые строки. Все поля не пустые. Я делаю подзапрос и хочу обновить таблицу ненулевыми результатами.
Мой окончательный ответ см. Ниже: В 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
Если я добавлю «И имя_символа НЕ НУЛЕВОЕ» в ГДЕ, я получу ошибку SQL. Если я запускаю его как есть, я получаю ошибки «добавление нуля в ненулевой столбец». :-(
Всем спасибо, нашел вот это:
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 (...) с помощью () приводит к действительно неясным (и неправильным) ошибкам.
ТИА,
Грег