Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск null значений / 18 сообщений из 18, страница 1 из 1
27.08.2021, 14:11
    #40093460
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Всем привет.

У меня есть база данных в которой 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
27.08.2021, 14:19
    #40093466
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Caxa_ASS,
можно попробовать поплясать от этого
Код: sql
1.
exec sp_msforeachtable 'select ''?'' tablename,count(*) cnt from ?'
...
Рейтинг: 0 / 0
27.08.2021, 14:23
    #40093469
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
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
27.08.2021, 14:23
    #40093470
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Caxa_ASS,
вы там сначала вьюшки гробите, а потом нуллы считаете или наоборот?
...
Рейтинг: 0 / 0
27.08.2021, 14:25
    #40093471
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
andy st,

всего понемногу :)
...
Рейтинг: 0 / 0
27.08.2021, 14:36
    #40093476
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
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
27.08.2021, 15:03
    #40093492
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Oleg_SQL,

спасибо!!!, сейчас буду тестировать.
...
Рейтинг: 0 / 0
28.08.2021, 12:22
    #40093600
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
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
28.08.2021, 12:35
    #40093604
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Caxa_ASS,

кавычки надо удвоить, где не удвоены.
...
Рейтинг: 0 / 0
28.08.2021, 13:02
    #40093611
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Владислав Колосов
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
28.08.2021, 14:31
    #40093626
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Caxa_ASS
Может есть опция как то напечатать вот эту строку для "предварительного просмотра"
Да, есть, select @cmd или print @cmd
...
Рейтинг: 0 / 0
29.08.2021, 14:03
    #40093672
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Caxa_ASS,

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

имя таблицы не отделено пробелами.
Надо все имена объектов БД обрабатывать функцией QUOTENAME().
Тип всех имён объектов сделать sysname.
Поскольку получится UNICODE. не забывать писать литеральные строки с буквой N перед открывающими кавычками.
...
Рейтинг: 0 / 0
30.08.2021, 12:23
    #40093787
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
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
30.08.2021, 16:55
    #40093876
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
Oleg_SQL,
Да, не было запятой, спасибо, все работает.
...
Рейтинг: 0 / 0
30.08.2021, 19:59
    #40093916
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
А если в именах таблиц есть квадратные скобки?
...
Рейтинг: 0 / 0
31.08.2021, 09:40
    #40093984
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск null значений
iap
А если в именах таблиц есть квадратные скобки?


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


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


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


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