Как исключить пустые строки без исключения пустых ячеек при переносе Excel в C # с помощью SQL (ADO)?

У меня есть такой запрос:

SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)};DBQ=D:\test.xls','SELECT * FROM Sheet1$]')

Это возвращает строки, которые все являются нулевыми, если они когда-либо были отредактированы, а затем удалены. Я хочу исключить их, но по-прежнему включать строки с хорошими данными, но с возможными нулевыми ячейками.

Моим первым побуждением было объединить И «ГДЕ каждый столбец НЕ ПУСТОЙ», вот так:

SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Excel Driver (*.xls)};   DBQ=D:\test.xls', 'SELECT * FROM Sheet1$]')
WHERE 
(
  Col1 IS NOT NULL 
  AND Col2 IS NOT NULL 
  AND Col3 IS NOT NULL 
  AND Col4 IS NOT NULL 
)

Это эффективно удаляет пустые строки, но по какой-то причине также исключает строку, в которой Col4 имеет пустую запись. Я пробовал это с скобками вокруг предложения WHERE и без них.

Кто-нибудь видит, что я делаю неправильно, или вместо этого есть предложение о другом методе, который я могу использовать для достижения тех же результатов?

В настоящее время это реализуется на C # с использованием ADO, но я тестирую запрос с помощью Sql Server Management Studio 2008.


person IronicMuffin    schedule 03.02.2010    source источник
comment
Хорошо ... Итак, я понимаю, что могу сделать это в коде C #. Я все еще думаю, что это странное поведение SQL, поэтому я хотел бы увидеть ответы или мысли о том, почему это не работает так, как ожидалось в SQL.   -  person IronicMuffin    schedule 04.02.2010


Ответы (1)


WHERE 
(
  Col1 IS NOT NULL 
  OR Col2 IS NOT NULL 
  OR Col3 IS NOT NULL 
  OR Col4 IS NOT NULL 
)

или

WHERE Coalesce (Col1, Col2, Col3, Col4) IS NOT NULL (нет функции объединения для oledb / excel)

person Joel Coehoorn    schedule 03.02.2010
comment
Поскольку это операция ИЛИ, не исключит ли он строку, в которой только один из столбцов имеет значение NULL? Я не хочу этого делать. - person IronicMuffin; 04.02.2010
comment
Нет, он включит эту строку. Представьте, что у вас есть только первая часть (col1 не равно нулю). Это покажет только строки, в которых col1 имеет значение. Если col1 имеет значение null, а col2 - нет, вы пропустите эту строку. Поэтому вам нужно разрешить col1 или col2 быть нулевым, но не обоим сразу. И так далее. - person Joel Coehoorn; 04.02.2010