RODBC sqlSave表创建问题

前端之家收集整理的这篇文章主要介绍了RODBC sqlSave表创建问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用RODBC的sqlSave创建表时遇到了麻烦(或者更准确地说,是将数据写入创建的表).

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

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

我在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,: 
  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中创建它并不重要,我会在通道上找不到错误

最后,请注意我在没有append = TRUE和创建新表时,以及使用和不使用rownames选项时都尝试过此操作.

来自Freenode #R的Mr.Flick让我检查一下我是否可以使用sqlQuery读取空表,事实上,我可以.

更新

我已经通过以下步骤更加接近了:

>我创建了一个ODBC连接,它直接进入sql Server中的数据库,而不是仅仅到默认(主)DB,然后在table =或tablename = statements中指定表的路径
>在sql Server Management Studio中创建表,如下所示

CREATE TABLE [dbo].[testing123](
[Person_DIMKey] [int] NULL
)[主要]

>在R中,我使用sqlUpdate和我的新ODBC连接,并且在表名周围没有括号
>现在sqlUpdate()看到了表,但它抱怨它需要一个唯一的列
>指示表中唯一的列是index = colname的唯一列会导致错误,表明该列不存在
>我删除并重新创建指定主键的表,

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

生成了一个名为PK__jive_BNR__2754EC2E30F848ED的主键和索引(根据sql Sever Management Studio的GUI界面)

>我将此索引/键指定为sqlUpdate()中的唯一列但我收到以下错误

sqlUpdate中的错误(db4,jive_BNR_Person_DIMKey,tablename =“jive_BNR_Person_DIMKey”,:
索引列PK__jive_BNR__2754EC2E30F848ED不在数据库表中

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

此外,这些步骤在我的帖子中编号为1到7,但StackOverflow在显示时重置列表的编号几次.如果有人能帮我清理这篇文章的这一方面,我会很感激.

解决方法

重新阅读RODBC vingette后,这是一个有效的简单解决方案:
sqlDrop(db,"df",errors = FALSE)
sqlSave(db,df)

完成.

在经过几天的实验之后,似乎问题源于使用附加选项,特别是table =或者,等同于tablename =.这些应该是有效的选项,但不知何故,他们设法导致我的特定版本的RStudio((Windows,64位,桌面版,当前版本),R(Windows,v3)和/或MS sql Server 2008的问题.

如果表从未存在过,sqlSave(db,df)也可以在没有sqlDrop(db,“df”)的情况下工作,但作为最佳实践,我正在编写try(sqlDrop(db,“df”,errors = FALSE),无声在我的代码中的所有sqlSave语句之前= TRUE).

原文链接:https://www.f2er.com/mssql/83562.html

猜你在找的MsSQL相关文章