SQL Server: поиск всех столбцов со значением NULL в базе данных

У меня есть база данных с ~ 420 таблицами. Во всех таблицах есть столбцы аудита: поле1, поле2, поле3.

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

Получите метаданные базы данных, а затем используйте динамический SQL. Метаданные сообщают вам полный список таблиц и столбцов. Затем используйте динамический SQL для сборки пользовательских операторов SQL для каждой таблицы, например select count(case when field1 is null then 1 end) as f1 from table1.

The Impaler 03.12.2018 17:56

Разные СУБД по-разному хранят метаданные о таблицах. Итак, какую СУБД вы используете? SQL Server, RedShift, Oracle, MySQL, SQLite, PostgreSQL и т. д. И т. Д. И т. Д.?

MatBailie 03.12.2018 17:57

Это БД SQL-сервера

Yauhen 03.12.2018 18:32

если столбец допускает значение NULL, следует предположить, что имеется значение NULL, нет? или, по крайней мере, могло быть.

S3S 03.12.2018 18:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
1 097
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ниже должен помочь вам трюк, поиграйте, если вам нужен другой вывод.

CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256) = ''
DECLARE @ColumnName nvarchar(100)

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''

    -- check tables
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_TYPE = 'BASE TABLE'
            AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0

    )

    -- check if above table has columns we want to check
    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)      
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
                AND TABLE_NAME = PARSENAME(@TableName, 1)
                AND COLUMN_NAME IN ('field1', 'field2', 'field3')
                AND QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        -- insert into temp table if column value is null
        IF @ColumnName IS NOT NULL
            INSERT INTO #Results EXEC('SELECT DISTINCT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +' WHERE ' + @ColumnName + ' IS NULL ')
    END   
END

 -- return results
SELECT ColumnName, ColumnValue FROM #Results

-- drop temp table
DROP TABLE #Results

Другие вопросы по теме