Вытяните NULL, если столбец отсутствует в таблице, пока UNION SQL Server

В настоящее время я создаю динамический SQL-запрос. Таблицы и столбцы отправляются как параметры. Таким образом, столбцы могут отсутствовать в таблице. Есть ли способ получить данные NULL в наборе результатов, когда столбец отсутствует в таблице?

бывший:

SELECT * FROM Table1

Выход:

created date | Name  | Salary | Married
-------------+-------+--------+----------
25-Jan-2016  | Chris |  2500  | Y
27-Jan-2016  | John  |  4576  | N
30-Jan-2016  | June  |  3401  | N

Итак, когда я запускаю запрос ниже

SELECT Created_date, Name, Age, Married 
FROM Table1

мне нужно получить

created date | Name  |  AGE   | Married
-------------+-------+--------+----------
25-Jan-2016  | Chris |  NULL  | Y
27-Jan-2016  | John  |  NULL  | N
30-Jan-2016  | June  |  NULL  | N

В этом работает что-нибудь вроде IF NOT EXISTS или ISNULL?

Я не могу использовать расширенный T-SQL в этом сегменте и должен быть простым, поскольку я создаю запрос UNION для более чем 50 таблиц (требование: |). Любой совет мне очень поможет.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
557
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я не могу придумать легкого решения. Поскольку вы используете динамический sql вместо

(previous dynamic string part)+' fieldname '+(next dynamic string part)

вы могли бы использовать

(previous dynamic string part)
+ case when exists (
select 1 
from sys.tables t 
inner join sys.columns c on t.object_id=c.object_id
where c.name=your_field_name and t.name=your_table_name)
) then ' fieldname ' else ' NULL ' end
+(next dynamic string part)

Я не могу сделать это для всех столбцов всех таблиц: | .. В среднем в параметрах отправляется 10 столбцов ..

Rathan Gopi 22.06.2018 14:04

Все, что я могу сказать, это ... Мне очень жаль! Другого пути не знаю. Если да, то, вероятно, вскоре появится еще один ответ.

George Menoutis 22.06.2018 14:10

Вам нужно сделать это только один раз - внутри цикла. Предположим, вы создаете оператор select в строке var, в которой вы перебираете таблицы, а затем внутренний цикл по полям. Если поле существует, добавьте его в пункт выбора. Если нет, добавьте NULL AS FieldName.

David Rushton 22.06.2018 14:17

хорошая идея назначения-данные!

George Menoutis 22.06.2018 14:21

@ destination-data - это то, что я сейчас планирую сделать, но было бы неплохо, если бы это был лучший способ сделать это, а не присоединяться к sys-таблицам. MS действительно стоит подумать о таких маленьких проблемах. ЕСЛИ ОШИБКА (ВЫБЕРИТЕ ВОЗРАСТ ИЗ Таблицы1, NULL) было бы здорово.

Rathan Gopi 22.06.2018 14:24

вы, мог, используете логику try-catch, чтобы делать то, что вы говорите, но это кажется еще большей головной болью. Честно говоря, я бы не стал винить MS в том, что у него чего-то подобного нет - на мой взгляд, это экзотика.

George Menoutis 22.06.2018 14:26

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