繁体   English   中英

如何选择链接服务器中对本地数据库中的特定列具有非空值的所有记录

[英]How do I select all of the records in a linked server that have a non-null value for a specific column into a local database

我有一个包含许多表的链接服务器。 其中一些表包含一个称为exampleColumn的列。 我想选择链接服务器中对exampleColumn具有非空值的所有记录。 (忽略所有没有此列的表和所有对此列具有空值的记录)如果exam​​pleColumn具有值,我想选择包括所有其他列的整个行。

此外,我想在本地服务器中创建表和列,以容纳与链接服务器中的名称和数据类型相同的名称和数据类型的选定数据(不创建将不带任何记录的表)

我在网上找到了许多资源,这些资源描述了如何基于特定值从不同的数据库中进行选择,但是我没有发现可以检查所有表而不只是一个表的任何资源。 我也找不到基于选择源动态创建表/列的任何信息。

由于没有太多细节方面的信息,因此不能完全确定您想要的是什么,但可以肯定的是您可以执行类似的操作。 这将生成您需要运行的所有插入语句。 您可以将其粘贴到变量中并通过动态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

- 编辑 -

要仅为至少有一行(其中的列不为空)的远程表创建本地表,只需在选择之前添加一个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
if exists (select 1 from [linkedserver].[db].[schema].[tableX]) begin

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

end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM