选择到临时表

2024-04-03

我相信我应该能够做到select * into #temptable from othertable (where #temptable以前不存在),但它不起作用。假如说othertable存在并具有有效数据,并且#sometemp不存在,

# conn <- DBI::dbConnect(...)
DBI::dbExecute(conn, "select top 1 * into #sometemp from othertable")
# [1] 1
DBI::dbGetQuery(conn, "select * from #sometemp")
# Error: nanodbc/nanodbc.cpp:1655: 42000: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name '#sometemp'.  [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. 

非临时版本运行没有错误:

DBI::dbExecute(conn, "select top 1 * into sometemp from othertable")
# [1] 1
DBI::dbGetQuery(conn, "select * from sometemp")
### ... valid data ...

系统信息:

conn
# <OdbcConnection> myuser@otherdomain-DATA01
#   Database: dbname
#   Microsoft SQL Server Version: 13.00.5026
DBI::dbGetQuery(conn, "select @@version")
#                                                                                                                                                                                                                          
# 1 Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64) \n\tMar 18 2018 09:11:49 \n\tCopyright (c) Microsoft Corporation\n\tStandard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: )\n

在Win11和Ubuntu上测试。 R-4.1.2、DBI-1.1.2、odbc-1.3.3。

我看到一些评论建议“select into ...”不适用于临时表 https://stackoverflow.com/questions/4101739/sql-server-select-into-existing-table#comment4415598_4101739,但我也看到一些教程证明它(对他们)有效。

背景故事:这是用于更新插入数据的通用访问器函数:我插入临时表,执行更新插入,然后删除临时表。我可以使用非临时表,但我认为在合理的情况下有充分的理由使用临时表,并且我想了解为什么这不能或不应该按预期工作。除了从 temps 切换之外,我还可以尝试重构othertable以编程方式,但这很容易出现某些列类型的解释错误。我不能只是插入临时表,因为有时数据类型映射不完美(例如当我应该使用nvarchar(max)和/或当新列由于全部-而不确定时NA).

相关链接:

  • 使用查询将数据插入临时表 https://stackoverflow.com/q/20107827/33582722013年起
  • https://www.sqlshack.com/select-into-temp-table-statement-in-sql-server/ https://www.sqlshack.com/select-into-temp-table-statement-in-sql-server/2021年起

有几种不同的方法:

  1. Use the immediatearg 在你的DBI::dbExecute陈述
DBI::dbExecute(conn, "select top 5 * into #local from sometable", immediate=TRUE)
DBI::dbGetQuery(conn, "select * from #local")
  1. 使用全局临时表
DBI::dbExecute(conn, "select top 5 * into ##global from sometable")
DBI::dbGetQuery(conn, "select * from ##global")
  1. 使用 dplyr/dbplyr
tt = tbl(conn, sql("select top 5 * from sometable")) %>% compute()
tt

另请参阅此处:https://github.com/r-dbi/odbc/issues/127 https://github.com/r-dbi/odbc/issues/127

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择到临时表 的相关文章

随机推荐

  • Unison:仅在一个方向上同步

    如果我有文件夹 A 和 B 是否可以将新文件从 A 同步到 B 并且不删除 B 中的文件而删除 A 中的文件 也就是说 我想用B作为任何文件的大容器 包括我曾经从A同步然后删除的文件 我认为这被认为是一种 单向同步 我了解您对 Unison
  • 在 eclipse 中使用 java.io 库,以便 FileInputStream 可以读取 dat 文件

    Goal Print the data from a dat file to the console using Eclipse 长期目标 我可以将 dat 文件传递 给可执行文件 它会创建一个带有格式化数据的新 txt 文件 The da
  • jQuery Dragenter 或 Dragover 包含子项

    我目前正在编写一个上传脚本 当然它具有拖放功能 However当我将文件拖到我的元素上时 我试图让它工作 它添加了类拖累然而 因为我的元素有孩子 所以它会不断地触发 因为它进入和离开元素 我想知道什么我怎样才能扩展 dragenter dr
  • 在 Visual Studio 中查看 var 的类型

    有没有办法查看 a 的类型var在 Visual Studio 2013 代码编辑器中 当我有一个疯狂的时候linq查询 很高兴看到结果类型是什么 我不想更换var关键字与实际类型 我只想看看它是什么 还有一个键盘快捷键会向您显示 将光标放
  • Java GUI repaint() 问题?

    我有一个 JFrame 该 JFrame 包含一个 JButton 我单击 JButton 然后创建了 10 个 JTextField 问题 在通过调整窗口大小 强制重新绘制 之前我看不到它们 只有这样我才能看到创建的 JTextField
  • 安装补丁 19 后,Oracle Forms 6i 在启动时崩溃并显示 0xC0000005 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPD 0xC0000005 是STATUS ACCESS VIOLATION 在 winnt h 中定义 这意味着应用程序尝试访问它无法
  • Python super 和设置父类属性

    我在 Python super 以及继承和属性方面遇到了一个非常奇怪的问题 首先 代码 usr bin env python3 import pyglet import pygame class Sprite pyglet sprite S
  • 找到字符串中最长的子串

    我想找到字符串中最长的重复字符序列 ex aabbccc gt ccc aabbbddccdddd gt dddd etc 在第一个示例中 ccc 是最长的序列 因为 c 重复了 3 次 在第二个示例中 dddd 是最长的序列 因为 d 重
  • 如何返回许多 Promise 并在执行其他操作之前等待所有 Promise

    我有一个循环 它调用一个异步执行操作的方法 这个循环可以多次调用该方法 在这个循环之后 我有另一个循环 仅当所有异步工作完成时才需要执行 所以这说明了我想要的 for i 0 i lt 5 i doSomeAsyncStuff for i
  • 使用函数计算 C# 中数组之间的欧几里德距离

    我想计算用户输入的点之间的欧几里德距离 如下所示 static void Main string args int numtest int Parse Console ReadLine int points new int 10 2 for
  • Angular 2 - 打开/关闭默认引导模式

    我不想使用Angular2 引导程序 https github com shlomiassaf angular2 modal or ng2 bs3 模态 https github com dougludlow ng2 bs3 modal正如
  • 获取 Autofac 中接口的所有已注册实现

    我需要从IComponentContext 已注册的列表Type是实现特定接口的 我不需要类型的实际实例 而是想要一个列表Type其中我could获取实例 我想使用此列表在消息总线上生成订阅 如何在 Autofac 中获取接口的所有已注册实
  • 单击按钮获取数据表行数据

    我有一个问题this https plnkr co edit cr4VDR1AZih8WiNxmKg6 p preview项目 我正在尝试创建一个 CRUD 菜单 当点击 编辑 按钮时 该行的数据将被传输到引导模式 并且用户可以从那里进行编
  • 如何访问 PHP 中多选下拉列表中选择的值?

    我在用Jquery 多选小部件 http www erichynds com jquery jquery ui multiselect widget 有一个带有多选选项的下拉列表框 我正在使用 MySql 数据库中的数据填充下拉列表 我无法
  • Google 身份服务 - 如何从经过身份验证的用户获取个人资料/电子邮件信息

    我正在移植一些现有的 js 代码 通过谷歌云平台进行身份验证 因为它们正在迁移到一组新的库 迁移指南 https developers google com identity oauth2 web guides migration to g
  • Cloud SQL 增量到 BigQuery

    我需要针对我正在研究的用例之一提供一些建议 使用案例 我们在 Cloud SQL 中拥有大约 5 10 个表的数据 其中一些被视为查找表 另一些则被视为事务性表 我们需要将其发送到 BigQuery 以生成 3 4 个表 扁平化 嵌套或非规
  • 如何在 JSONP 中处理 twitter 失败鲸鱼

    I load http search twitter com search json callback formatTweets q somehashTag timestamp new Date getTime 我突然得到 Error il
  • FFMPEG 将视频叠加在另一个视频之上

    我已经浏览了 stackoverflow 上的所有问题 但没有一个答案对我有用 我有一个屏幕录制的 mp4 视频和另一个从网络摄像头录制的 mp4 视频 我想将网络摄像头视频覆盖在屏幕录制视频的左上角 我想我终于找到了执行此操作的正确命令行
  • 存储设置:XML 与 SQLite?

    我目前正在编写一个 IRC 客户端 并且一直在尝试找出一种存储服务器设置的好方法 基本上是一个大的网络列表及其服务器 就像大多数 IRC 客户端一样 我决定使用 SQLite 但后来我想以 XML 格式 也许是最终格式 在线免费提供该列表
  • 选择到临时表

    我相信我应该能够做到select into temptable from othertable where temptable以前不存在 但它不起作用 假如说othertable存在并具有有效数据 并且 sometemp不存在 conn l