2010-02-03 1 views
0

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

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

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

Мой первый инстинкт должен был сделать «где каждый столбец IS NOT NULL» операции AND вместе, например, так:

 
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.

+0

0 ... так что я понимаю, что могу сделать это в коде C#. Я все еще думаю, что это странное поведение от SQL, поэтому мне хотелось бы получить ответы или мысли о том, почему это не работает в SQL. – IronicMuffin

ответ

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

или

ГДЕ Coalesce (Col1, Col2, Col3, COL4) NOT NULL (нет функции коалесценции для oledb/excel)

+0

Поскольку это OR'd, не будет ли он исключать строку, где только один из столбцов имеет значение NULL? Это то, что я не хочу делать. – IronicMuffin

+0

Нет, это будет _include_ эта строка. Представьте себе, что у вас была только первая часть (col1 не null). Это будет показывать только строки, в которых значение col1 имеет значение. Если col1 имеет значение null, а col2 - нет, вы пропустите эту строку. Поэтому вам нужно разрешить col1 _or_ col2 быть нулевым, а не оба. И так далее. –

 Смежные вопросы

  • Нет связанных вопросов^_^