powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск null значений
18 сообщений из 18, страница 1 из 1
Поиск null значений
    #40093460
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

У меня есть база данных в которой 80 таблиц. У всех таблиц есть столбец -> 'Status'.

Мне нужно проверять каждую таблицу, столбец 'Status' на наличие NULL

Ниже select, который делает такую проверку для одной таблицы.

Как можно выполнять проверку для всех таблиц? Буду благодарен за помощь.

Код: sql
1.
2.
3.
select Name_1 count([Name_2]) from Table_1 
where  [Status] is null
group by Name_1 
...
Рейтинг: 0 / 0
Поиск null значений
    #40093466
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS,
можно попробовать поплясать от этого
Код: sql
1.
exec sp_msforeachtable 'select ''?'' tablename,count(*) cnt from ?'
...
Рейтинг: 0 / 0
Поиск null значений
    #40093469
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @cmd VARCHAR(MAX) = '';
SELECT @cmd = CONCAT('SELECT TOP 1 ', '''', t.TABLE_SCHEMA, '.', t.TABLE_NAME, '''', ' FROM ', t.TABLE_SCHEMA, '.', t.TABLE_NAME, ' WHERE Status IS NULL UNION ALL', CHAR(13))
  FROM INFORMATION_SCHEMA.TABLES AS t
       JOIN INFORMATION_SCHEMA.COLUMNS AS c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
                                               AND t.TABLE_NAME = c.TABLE_NAME
                                               AND c.COLUMN_NAME = 'Status';

SET @cmd = SUBSTRING(@cmd, 1, LEN(@cmd) - LEN('UNION ALL') - 1);

EXEC (@cmd);
...
Рейтинг: 0 / 0
Поиск null значений
    #40093470
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS,
вы там сначала вьюшки гробите, а потом нуллы считаете или наоборот?
...
Рейтинг: 0 / 0
Поиск null значений
    #40093471
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andy st,

всего понемногу :)
...
Рейтинг: 0 / 0
Поиск null значений
    #40093476
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL
Caxa_ASS,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @cmd VARCHAR(MAX) = '';
SELECT @cmd = CONCAT('SELECT TOP 1 ', '''', t.TABLE_SCHEMA, '.', t.TABLE_NAME, '''', ' FROM ', t.TABLE_SCHEMA, '.', t.TABLE_NAME, ' WHERE Status IS NULL UNION ALL', CHAR(13))
  FROM INFORMATION_SCHEMA.TABLES AS t
       JOIN INFORMATION_SCHEMA.COLUMNS AS c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
                                               AND t.TABLE_NAME = c.TABLE_NAME
                                               AND c.COLUMN_NAME = 'Status';

SET @cmd = SUBSTRING(@cmd, 1, LEN(@cmd) - LEN('UNION ALL') - 1);

EXEC (@cmd);




SELECT @cmd + = CONCAT(.....
...
Рейтинг: 0 / 0
Поиск null значений
    #40093492
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL,

спасибо!!!, сейчас буду тестировать.
...
Рейтинг: 0 / 0
Поиск null значений
    #40093600
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL,

немного изменив код под свои требования, все работает (скриншот -> вариант 1).

Но есть необходимость добавлять третьим столбцом, к получаемым данным, название таблицы, чтобы было понимание с какой таблицы эти данные.

На скриншоте -> вариант 2 (выделено желтым), добавил/вернул
Код: sql
1.
, '''', t.TABLE_SCHEMA, '.', t.TABLE_NAME, '''',

, но при запуске возвращает ошибки ->
Код: sql
1.
Incorrect syntax near 'dbo.[MainKor]'


Код: sql
1.
Incorrect syntax near 'dbo.[MainDll]'


..........
Код: sql
1.
Incorrect syntax near 'dbo.[MainTrf]'



Что не так с синтаксисом и/или, что изменить в коде, чтобы третьей колонкой были названия таблиц из которых получены данные?
Буду благодарен за помощь.
[img=]
...
Рейтинг: 0 / 0
Поиск null значений
    #40093604
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

кавычки надо удвоить, где не удвоены.
...
Рейтинг: 0 / 0
Поиск null значений
    #40093611
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Caxa_ASS,

кавычки надо удвоить, где не удвоены.


да, я предполагал, что в кавычках дело, но не могу понять где именно. Может есть опция как то напечатать вот эту строку для "предварительного просмотра"

Код: sql
1.
2.
SELECT @cmd += CONCAT('SELECT TOP 1 [code] as Name,  count([Id]) as Quantity', '''', t.TABLE_SCHEMA, '.', t.TABLE_NAME, '''', 'FROM ''' , t.TABLE_SCHEMA, '.[', t.TABLE_NAME, '] 
WHERE [Status] IS NULL group by [code] UNION ALL', CHAR(13))
...
Рейтинг: 0 / 0
Поиск null значений
    #40093626
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS
Может есть опция как то напечатать вот эту строку для "предварительного просмотра"
Да, есть, select @cmd или print @cmd
...
Рейтинг: 0 / 0
Поиск null значений
    #40093672
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

имя таблицы не отделено пробелами.
...
Рейтинг: 0 / 0
Поиск null значений
    #40093676
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Caxa_ASS,

имя таблицы не отделено пробелами.
Надо все имена объектов БД обрабатывать функцией QUOTENAME().
Тип всех имён объектов сделать sysname.
Поскольку получится UNICODE. не забывать писать литеральные строки с буквой N перед открывающими кавычками.
...
Рейтинг: 0 / 0
Поиск null значений
    #40093787
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS
Владислав Колосов
Caxa_ASS,

кавычки надо удвоить, где не удвоены.


да, я предполагал, что в кавычках дело, но не могу понять где именно. Может есть опция как то напечатать вот эту строку для "предварительного просмотра"

Код: sql
1.
2.
SELECT @cmd += CONCAT('SELECT TOP 1 [code] as Name,  count([Id]) as Quantity', '''', t.TABLE_SCHEMA, '.', t.TABLE_NAME, '''', 'FROM ''' , t.TABLE_SCHEMA, '.[', t.TABLE_NAME, '] 
WHERE [Status] IS NULL group by [code] UNION ALL', CHAR(13))




Мой запрос выводил названия таблиц.
Вы добавили два своих столбца, а запятую после Quantity не поставили.
...
Рейтинг: 0 / 0
Поиск null значений
    #40093876
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL,
Да, не было запятой, спасибо, все работает.
...
Рейтинг: 0 / 0
Поиск null значений
    #40093916
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в именах таблиц есть квадратные скобки?
...
Рейтинг: 0 / 0
Поиск null значений
    #40093984
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap
А если в именах таблиц есть квадратные скобки?


По правде ни разу не встречал на работе таких случаев.
Ну тогда двойные кавычки добавить ))
...
Рейтинг: 0 / 0
Поиск null значений
    #40094053
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL
iap
А если в именах таблиц есть квадратные скобки?


По правде ни разу не встречал на работе таких случаев.
Ну тогда двойные кавычки добавить ))
А если двойные кавычки уже там?
Мне тут регулярно встречаются шедевры, импортированные напрямую из Excel, вида
Код: sql
1.
2.
select [Promo Codes ]
from dbo.[Type "NONE"$];


Послушайте опытных, кто на это уже наступал, и всегда используйте QUOTENAME() для таких случаев. Эта функция, кстати, полезнее чем кажется - можно много во что обрамлять, не только в квадратные скобки. Но если строка превышает длину sysname (128), то возвращается NULL, так что реально она только для имен объектов подходит.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск null значений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]