布甲狂战 2023-02-25 00:17 采纳率: 0%
浏览 8

如何通过链接服务器, 执行动态sql得到返回,实现本地转存

简单来说是 如何通过链接服务器, 执行动态sql, 并得到返回结果, 将结果转存
整体需求为 通过链接服务器 将动态SQL查询结果 转存入本地.
链接服务器中的 表为大宽表, 需要将500+个字段存入本地, 直接select语句长度为16k个字符长度
由于是大宽表,字段非常非常的长, 导致生成的sql语句过长 无法使用部分方法
  1. 第一次, 最开始使用 OPENQUERY(linkserver,"sqlstr") 的方式
    sql select * from OPENQUERY(INSQL,"select xxx,xxx...*[500+] fromxxx")
    问题为OPENQUERY最多支持8000个字符

  2. 第二次, 使用 exec()at linkserver 的方式
    sql exec("sqlstr")at linkserver
    问题为 只能搜索查看无法转存

  3. 第三次, 使用 exec executesql "sqlstr" 的方式
    sql exec executesql "sqlstr",N'参数1 output...',返回参数1 output
    问题为 SQL貌似没有数组或列表 导致定义的变量, 返回的为最后一次查询结果
    考虑过使用表变量,但在executesql 的输入N''中修改会有语法错误.

  4. 第四次, 使用insert into table exec()at linkserver
    sql insert into table exec("sqlstr")at linkserver
    问题为
    报错 The OLE DB provider "INSQL" for linked server "insql" does not contain the table "runtime.ddbo.WideHistory". The table either does not exist or the current user does not have permissions on that table.
    同时并不确定exec()at linkserver 是否有语法错误,是否能够执行

尝试许久和找遍搜索引擎后放弃了.
办法是有的比如 纵向拆表 将500+个字段拆分多次查询,
或横向拆表 使用游标 (不太清楚如何将 游标与链接查询 结合)

主要原因为字段太多太长, 导致很多方法失效
请教 这种情况使用什么方案完成查询转存, 或者有语法能实现我没发现

请教各位编程帝教一教, 我实在是没办法了

  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-02-25 08:04
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    针对你提出的需求,可以尝试以下方案:

    1. 拆分查询:将需要查询的字段进行拆分,分为多个子查询,每个子查询返回一部分字段,然后在本地将这些子查询的结果拼接起来。这种方法可能需要修改业务逻辑,但对于字段太多太长的情况是一种有效的解决方案。
    2. 游标:使用游标可以一次性查询所有字段,然后逐行处理每个查询结果,并将其插入到本地表中。需要注意的是,游标会占用较多的系统资源,所以需要谨慎使用,特别是在数据量较大的情况下。
    3. 使用临时表:在连接服务器中创建一个临时表,将需要查询的字段先插入到这个临时表中,然后再将临时表中的数据转存到本地表中。这种方法需要一定的权限,但可以避免语法错误等问题,而且可以避免游标占用系统资源的问题。

    具体的实现方式可以根据具体的业务需求和技术水平进行选择。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月25日

悬赏问题

  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了
  • ¥15 页面初次加载时,JS调用对象可以调用成功,但是一旦跳转到另一个页面,再跳转回来后这个对象就显示undefind了,调用也调用不了了,什么原因?
  • ¥15 来个厉害的程序开发的,安排点活给你做
  • ¥15 rexroth indramotion MTX micro系统轴耦合编程
  • ¥100 springboot2.7.x 整合 sharding 的问题
  • ¥15 如何通过命令行操作统信360安全浏览器?
  • ¥15 upload-labs-master第三关
  • ¥15 关于LT3758反激式负压电源,功率三极管烧毁的问题
  • ¥20 aruba ap305 CAP转IAP