当前位置: 首页 > 面试题库 >

RODBC sqlSave表创建问题

胡博艺
2023-03-14
问题内容

我在使用RODBC的sqlSave创建表时遇到了麻烦(或更准确地说,是将数据写入到创建的表中)。

这与现有的sqlSave问题/答案不同,因为

  1. 他们遇到的问题是不同的,我可以创建表,而他们不能,
  2. 我已经不成功地合并了他们的解决方案,例如在运行sqlSave之前关闭并重新打开连接,
  3. 错误消息是不同的,唯一的例外是帖子在以上两种方式中是不同的

我在Windows RDP上使用MS SQL Server 2008和64位R。

我有一个简单的数据框,只有1列,包含3、4或5位整数。

> head(df)
                        colname
1                           564
2                          4336
3                         24810
4                         26206
5                         26433
6                         26553

当我尝试使用sqlSave时,没有数据写入表。此外,一条错误消息听起来好像无法创建该表,尽管该表实际上是用0行创建的。

根据我发现的建议,我已经尝试在运行sqlSave之前关闭并重新打开RODBC连接。即使使用append = TRUE,我也尝试在删除表之前执行此操作,但这不会影响任何操作。

> sqlSave(db3, df, table = "[Jason].[dbo].[df]", append = TRUE, rownames = FALSE)
Error in sqlSave(db3, df, table = "[Jason].[dbo].[df]",  : 
  42S01 2714 [Microsoft][ODBC SQL Server Driver][SQL Server]There is already 
an object named 'df' in the database.
[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE [Jason].[dbo].[df]  
("df" int)'

创建表后,我还尝试在表上使用sqlUpdate()。不管是在R还是SQL Server Management
Studio中创建它,都会收到错误消息table not found on channel

最后,请注意,在创建新表时以及不使用rownames选项的情况下,我也尝试了不使用append = TRUE的情况。

来自Freenode的#R的Mr.Flick先生让我检查了是否可以使用sqlQuery读取空表,并且确实可以。

更新

我已经完成了以下步骤:

  1. 我创建了一个ODBC连接,该连接直接连接到SQL Server中的数据库,而不是直接连接到默认(主)数据库,然后在table =ortablename =语句中指定表的路径
  2. 在SQL Server Management Studio中创建表,如下所示

GO

CREATE TABLE [dbo].[testing123]( [Person_DIMKey] [int] NULL ) ON [PRIMARY]

GO

  1. sqlUpdate与我的新ODBC连接一起使用的RI中,表名周围没有括号

  2. 现在,sqlUpdate()可以看到该表,但是它抱怨它需要一个唯一的列

  3. 指示表中的唯一列是唯一列,并index = colname导致错误提示该列不存在

  4. 我删除并重新创建了指定主键的表,

GO

CREATE TABLE [dbo].[jive_BNR_Person_DIMKey]( [jive_BNR_Person_DIMKey] [int] NOT NULL PRIMARY KEY ) ON [PRIMARY]

GO

生成名为“主键”和“索引”(根据SQL Sever Management Studio的GUI界面)的文件
PK__jive_BNR__2754EC2E30F848ED

  1. 我将此索引/键指定为sqlUpdate()中的唯一列,但出现以下错误:

Error in sqlUpdate(db4, jive_BNR_Person_DIMKey, tablename = "jive_BNR_Person_DIMKey", : index column(s) PK__jive_BNR__2754EC2E30F848ED not in database table

为了记录,我为索引指定了正确的列名(而不是“ colname”);感谢MrFlick要求澄清。

另外,这些步骤在我的帖子中编号为1到7,但是当列表显示时,StackOverflow会重置列表的编号几次。如果有人可以帮助我清理这篇文章的这一方面,我将不胜感激。


问题答案:

重新阅读RODBC幕之后,下面是起作用的简单解决方案:

sqlDrop(db, "df", errors = FALSE)
sqlSave(db, df)

完毕。

经过数天的尝试后,似乎问题出在使用附加选项,特别是table =或等效地tablename =。这些应该是有效的选项,但是以某种方式它们会导致我的RStudio特定版本((Windows,64位,桌面版本,当前版本),R(Windows,64位,v3)和/或MS
SQL Server 2008)引起问题。

sqlSave(db, df)也没有工作,sqlDrop(db, "df")如果表从来没有存在过,但作为最佳实践我写try(sqlDrop(db, "df", errors = FALSE), silent = TRUE)的所有之前sqlSave在我的代码语句。



 类似资料:
  • null 我还尝试在表创建后使用sqlUpdate()。不管我是在R中还是在SQL Server Management Studio中创建它,我都会得到错误 最后,请注意,在没有append=TRUE的情况下,在创建新表时,以及在使用和不使用rownames选项的情况下,我也尝试了这种方法。 Freenode的#r的Flick先生让我检查是否可以使用sqlQuery读取空表,事实上,我可以。 我创

  • 我运行了以下查询: 然后得到一个带有时间戳数据类型的列: 我想用这个表输出创建一个新表。

  • 创建pet表(宠物表),包含列:宠物名字,拥有者,物种,性别,出生日期,死亡日期: mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); 一旦你创建了表,你可以查看刚刚创建的表是否是想创建的表:

  • 在本章中,我们将讨论如何在项目中创建问题: 步骤(1): 登录到您的GitLab帐户并转到项目部分下的项目: 步骤(2): 转到问题选项卡并单击新问题按钮创建一个新问题,如下所示: 步骤(3): 现在,填写标题,说明等信息,如果需要,可以选择用户分配问题,里程碑(请参阅本章以获取更多信息),操作时标签或可由开发人员在创建之后自行选择。 步骤(4): 点击 Submit issue 按钮,您将看到一

  • Hbase运行不完美,我在尝试在Hbase上创建表时遇到问题,当然我无法访问上的Hbase状态UI。请帮助!! 以下是我的所有配置文件: (hadoop conf)core-site.xml:(主服务器和从服务器配置相同)

  • 问题内容: 您可以给MS Access等同于MySQL“如果不存在则创建表…”吗? 更新 像这样 也将是合适的 问题答案: 对于SQL DDL代码,答案是否定的。ACE / Jet SQL没有任何流控制语法,并且ACE / Jet只能执行一个SQL语句。是的,没错:ACE / Jet不支持程序代码:(