sql - 如何将链接服务器中对特定列具有非空值的所有记录选择到本地数据库中
问题描述
我有一个包含许多表的链接服务器。其中一些表包含名为 exampleColumn 的特定列。我想选择链接服务器中对于 exampleColumn 具有非空值的所有记录。(忽略所有没有该列的表以及该列具有空值的所有记录)如果 exampleColumn 有值,我想选择包括所有其他列的整行。
此外,我想在本地服务器中创建表和列,以容纳与链接服务器中具有相同名称和数据类型的选定数据(不创建不会带来任何记录的表)
我在网上找到了许多资源,这些资源描述了如何根据特定值从不同的数据库中进行选择,但我还没有找到任何可以检查所有表而不仅仅是一个表的资源。我也找不到任何关于基于选择源动态创建表/列的内容。
解决方案
不完全确定你想要什么,因为细节不多,但很确定你可以做这样的事情。这将生成您需要运行的所有插入语句。您可以将其粘贴到变量中并通过动态 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
推荐阅读
- wordpress - 使用 elementor 在我的页面中找不到内容区域
- android - 如何将图像文件从图库复制到另一个文件夹而不以编程方式更改其修改日期?
- google-tag-manager - 谷歌标签管理器正在破坏生产中的 src 属性
- android - BitmapFactory decodeFile 返回 null
- laravel - 在发送到 Laravel 中查看之前计算数据
- python - 提取从 CSV 排序的两列
- flutter - 在颤动中从地图中获取项目
- java - 如何在 Spring 中为事务方法编写事务单元测试?
- tsql - 使用动态 SQL 创建和插入数据库
- java - 构造函数中的堆栈