回答

收藏

RODBC sqlSave表创建问题

技术问答 技术问答 119 人阅读 | 0 人回复 | 2023-09-13

我在使用RODBC的sqlSave在创建表时遇到麻烦(或者更准确地说,是将数据写入创建表)。
! z, T4 B: B/ g这与现有的sqlSave由于问题/答案不同,问题/答案也不同
$ E. P2 H/ }3 e- X  w" Q8 Z! L! ?[ol]他们遇到的问题是不同的,我可以创建表格,但他们不能,% C7 L: T2 l1 ]; |* R2 ?
我没有成功地合并他们的解决方案,比如运行sqlSave关闭并重新打开连接,% t7 _* F% N( g
错误的消息是不同的,唯一的例外是帖子在上述两种方式上是不同的[/ol]我在Windows RDP上使用MS SQL Server 2008和64位R。/ `, k) |; \; K- b
我有一个简单的数据框,只有一列,包括3、4或5位整数。2 Z0 R" x' |8 h) w1 y
> head(df)                        colname                5642                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    当我试着用的时候sqlSave当时,表中没有数据。此外,一个错误的消息听起来像是无法创建的,尽管它实际上是由0行创建的。
: G' \; a2 g% `6 ~& G* I2 f根据我发现的建议,我已经尝试在运行sqlSave关闭并重新打开之前RODBC连接。即使使用append =TRUE,在删除表之前,我也试图执行此操作,但这不会影响任何操作。
0 ?! z2 i2 `; E" I> 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 Management5 A" s1 x9 h7 o  K4 P  S
Studio如果你创造它,你会收到错误的消息table not found on channel6 {" B) F% D" N# Y4 l0 c0 O
最后,请注意,在创建新表时不要使用rownames我也试过不使用选项。append = TRUE的情况。7 L4 [# E4 ]( k3 {" }* _
来自Freenode的#R的Mr.Flick先生让我检查一下是否可以使用sqlQuery读空表,确实可以。
( I+ Z% r3 y3 B3 D/ |更新
# ]) g+ @! Q% c8 F" v6 C) D% s1 m我已经完成了以下步骤:, S" H% D) p6 c- v4 X: F  G
[ol]我创造了一个ODBC连接直接连接到SQL Server在table =ortablename =语句中指定表的路径; K! R. U! U0 V" m. D- a0 Y
在SQL Server Management Studio中创表,如下所示[/ol]GO' |( T! }( j. \0 p
CREATE TABLE [dbo].[testing123]( [Person_DIMKey] [int] NULL ) ON[PRIMARY]
5 b3 v' z, \* `( e: |* HGO, u1 S4 D' D" o5 F8 P; T' r
[ol]在sqlUpdate与我的新ODBC连接在一起使用RI中间,表名周围没有括号
$ J' Z. l  Z+ V: _0 {! B现在,sqlUpdate()可以看到表,但它抱怨它需要一个唯一的列
2 P3 N+ P9 X% F$ J  W6 l/ y& Y指示表中唯一的列是唯一的列,index = colname导致错误列不存在' |9 J" \3 T8 w
我删除并重新创建了指定主键的表,9 ]+ o& x1 ^% H. `- `! ?( L, H
[/ol]GO& F4 B! \8 {5 O" P  t# l' }2 |" ]* k( [: @
CREATE TABLE [dbo].[jive_BNR_Person_DIMKey]( [jive_BNR_Person_DIMKey] [int]NOT NULL PRIMARY KEY ) ON [PRIMARY]; W$ F8 L( o1 m- B
GO
+ H) e; F( I0 \8 l1 C8 b3 ~生成名为“主键”和“索引”(根据SQL Sever Management Studio的GUI界面)文件/ P, B- ]/ Q5 l
PK__jive_BNR__2754EC2E30F848ED
1 r# {7 U5 V+ w[ol]我把这个索引/键指定为sqlUpdate()中唯一的一列,但有以下错误:[/ol]Error in sqlUpdate(db4,jive_BNR_Person_DIMKey,tablename ="jive_BNR_Person_DIMKey",: index column(s) PK__jive_BNR__2754EC2E30F848EDnot in database table
* [1 |- M% B1 l" A  x7 E, o为了记录,我为索引指定了正确的名(而不是 colname”);感谢MrFlick要求澄清。
% a9 }+ F- x2 q3 r+ P此外,这些步骤在我的帖子中编号为1到7,但当列表显示时,StackOverflow将重置列表的号码几次。如果有人能帮我清理这篇文章的这方面,我将非常感激。" x- c. h4 M# S; V' y
                                                               
# }3 @% L! c7 g3 D  M$ `; \    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则