Обновление
Выпущена версия 2017 * concat_ws
, которая может значительно упростить код - см. Ответ Торстена Кеттнера для деталей . Я оставляю этот ответ здесь в надежде, что он поможет другому читателю, использующему более старую версию SQL Server.
Первая версия
Одним простым решением было бы используйте комбинацию case
, concat
, stuff
и оператора конкатенации строк (+
), используя тот факт, что concat
будет неявно преобразовывать null
в пустые строки, тогда как +
не будет.
Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните этот шаг в ваших будущих вопросах):
create table table_1 (col1 int, col2 int, col3 int);
create table table_2 (col1 int, col2 int, col3 int, error_value varchar(100));
insert into table_1(col1, col2, col3) VALUES
(null, null, null),
(null, null, 1),
(null, 1, null),
(null, 1, 1),
(1, null, null),
(1, null, 1),
(1, 1, null),
(1, 1, 1);
Затем оператор insert...select
:
insert into table_2 (col1, col2, col3, error_value)
select
col1, col2, col3, stuff(
concat(
',' + case when col1 is null then 'col1' end, -- will be null if col1 contains a value
',' + case when col2 is null then 'col2' end, -- will be null if col2 contains a value
',' + case when col3 is null then 'col3' end, -- will be null if col3 contains a value
' is null'), 1, 1, '')
from table_1
where col1 is null or col2 is null or col3 is null
Смотрите живую демонстрацию на rextester