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

如何通过链接服务器, 执行动态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日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀