Как выбрать все записи в связанном сервере, которые имеют ненулевое значение для определенного столбца в локальной базе данных - PullRequest
0 голосов
/ 08 мая 2019

У меня есть связанный сервер, который содержит много таблиц.Некоторые из этих таблиц содержат определенный столбец с именем exampleColumn.Я хотел бы выбрать все записи на связанном сервере, которые имеют ненулевое значение для exampleColumn.(игнорируя все таблицы, у которых нет этого столбца, и все записи, которые имеют нулевое значение для этого столбца) Я хотел бы выбрать всю строку, включая все другие столбцы, если значение exampleColumn имеет значение.

ДополнительноЯ хотел бы создать таблицы и столбцы на локальном сервере для размещения выбранных данных с теми же именами и типами данных, что и на связанном сервере (без создания таблиц, в которых записи не будут перенесены)

Я нашел много ресурсов онлайн, которые описывают, как выбирать из разных баз данных на основе определенного значения, но я не нашел ни одного, который проверял бы все таблицы вместо одной.Я также не могу найти что-либо о динамическом создании таблиц / столбцов на основе источника выбора.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Не совсем уверен, что вы хотите здесь, так как не так много деталей, но почти уверен, что вы можете сделать что-то подобное. Это сгенерирует все операторы вставки, которые вам нужно выполнить. Вы можете вставить это в переменную и выполнить через динамический sql или просто скопировать и вставить для запуска. Не совсем уверен, где находится связанный сервер по отношению к тому, что вы выполняете свой запрос.

declare @ColumnName sysname = 'exampleColumn'

select 'select * into ' + quotename(object_name(object_id)) + ' from [LinkServer].[Database].[Schema].' + quotename(object_name(object_id)) + ' where ' + QUOTENAME(@ColumnName) + ' is not null;'
from sys.columns
where name = @ColumnName

- EDIT -

Чтобы создавать локальные таблицы только для удаленных таблиц, в которых есть хотя бы одна строка, в которой столбец не равен нулю, просто добавьте EXISTS перед выбором. Вот так.

select 'IF EXISTS(select * from [LinkServer].[Database].[Schema].' + quotename(object_name(object_id)) + ' where ' + QUOTENAME(@ColumnName) + ' is not null) select * into ' + quotename(object_name(object_id)) + ' from [LinkServer].[Database].[Schema].' + quotename(object_name(object_id)) + ' where ' + QUOTENAME(@ColumnName) + ' is not null;'
from sys.columns
where name = @ColumnName
0 голосов
/ 08 мая 2019
if exists (select 1 from [linkedserver].[db].[schema].[tableX]) begin

select *
into [schema].[tableX]
from [linkedserver].[db].[schema].[tableX]

end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...