2016-02-17 2 views
0

Эти вопросы (one, two, three) все идентифицированных как вернуть пустую строку вместо NULLдля одного столбца:Заменить NULL с пустой строкой в ​​SQL для всех столбцов

SELECT ISNULL(ColA,'') AS ColA FROM Table1 

Однако я есть запрос, который возвращает целую кучу столбцов, которые я слишком ленив, чтобы выбрать индивидуально (не волнуйтесь - это не производственный запрос)

SELECT * FROM Table1 

ли Ther e способ вернуть пустую строку для всех столбцов, возвращаемых оператором подстановки?

Для примера, следующий наивная попытка не будет работать:

SELECT ISNull(*,'') FROM Table1 
+0

не без использования динамического SQL, и даже тогда вам нужно будет сначала проверить, какой тип данных имеет каждый столбец. – Lamak

+0

В зависимости от количества столбцов и/или того, являются ли они одним и тем же типом данных, ваши лучшие ставки, вероятно, либо сгенерировать оператор, выбрав «INFORMATION_SCHEMA», либо использовать текстовый редактор с хорошими возможностями макросов. –

+0

«Я слишком ленив». Нет хороших технических решений для людей. Я предлагаю получить анализатор запросов, который заполнит ваши имена столбцов для вас. –

ответ

1

Может быть, вы можете использовать это, чтобы создать строку SQL запроса для того, чтобы выполнить его динамически, проверьте, работает ли это для вас:

;WITH cte AS ( 
SELECT 'ISNULL(' + COLUMN_NAME + ',' + 
    CASE 
    WHEN DATA_TYPE = 'bit' THEN '0' 
    WHEN DATA_TYPE = 'int' THEN '0' 
    WHEN DATA_TYPE = 'decimal' THEN '0' 
    WHEN DATA_TYPE = 'date' THEN '''1/1/1900''' 
    WHEN DATA_TYPE = 'datetime' THEN '''1/1/1900''' 
    WHEN DATA_TYPE = 'uniqueidentifier' THEN '00000000-0000-0000-0000-000000000000' 
    ELSE '''''' 
    END + ') AS ' + COLUMN_NAME AS columnNameIsNull 
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName' 
) 

SELECT 
stuff((
    SELECT (', ' + columnNameIsNull) 
         FROM cte 
         FOR XML PATH('') 
        ), 1, 1, '') AS string 
0

Зачем писать сложные запросы динамического SQL, если вы можете просто использовать столбец Select (ALT + Click + перетаскивание) в perform a multiline select in your query editor?

Таким образом, вы можете ввести ISNULL( ... один раз для всех ваших столбцов. Просто убедитесь, что столбцы выровнены, и вам должно быть хорошо идти. Поддерживается как SQL Server Management Studio 2012. В противном случае просто используйте Notepad ++.

+0

Я не думаю, что динамический запрос столь же изящный, как я надеялся, но выбор столбца также имеет проблемы. Проблема в том, что после выполнения вычисления в поле (используя 'ISNULL'), SQL сбрасывает имя столбца. Поэтому вам нужно будет обновить 'ColA' до' ISNULL (ColA, '') AS ColA', который сложно выбрать для многострочной выборки. Для исправления вручную я бы предпочел просто [найти и заменить запрос reqex в моем комментарии выше] (http://stackoverflow.com/questions/35462467/replace-null-with-empty-string-in-sql -for-all-columns # comment58621482_35462467) – KyleMit

+0

Вот почему я alawasy пишу свои запросы как Alias ​​= ISNULL (ColA, ColB) –

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