回答

收藏

RODBC sqlSave表创建问题

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

我在使用RODBC的sqlSave在创建表时遇到麻烦(或者更准确地说,是将数据写入创建表)。: e; Q7 l. u9 W1 L) g9 S
这与现有的sqlSave由于问题/答案不同,问题/答案也不同
6 c2 z6 S1 t9 l[ol]他们遇到的问题是不同的,我可以创建表格,但他们不能,
5 i  L7 G9 Z/ q7 J我没有成功地合并他们的解决方案,比如运行sqlSave关闭并重新打开连接,
, g/ |3 T; E& g& v+ k错误的消息是不同的,唯一的例外是帖子在上述两种方式上是不同的[/ol]我在Windows RDP上使用MS SQL Server 2008和64位R。4 F& g# [) [- b5 l6 L
我有一个简单的数据框,只有一列,包括3、4或5位整数。9 ]0 m; _$ T( Z( y* v2 |
> head(df)                        colname                5642                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    当我试着用的时候sqlSave当时,表中没有数据。此外,一个错误的消息听起来像是无法创建的,尽管它实际上是由0行创建的。
- @+ {  |! A6 Y9 b根据我发现的建议,我已经尝试在运行sqlSave关闭并重新打开之前RODBC连接。即使使用append =TRUE,在删除表之前,我也试图执行此操作,但这不会影响任何操作。
% o4 q2 B2 V5 Z  k( X& r> 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 Management9 a9 s# V, G) @- t
Studio如果你创造它,你会收到错误的消息table not found on channel
: l) @! a5 N5 }% `7 S最后,请注意,在创建新表时不要使用rownames我也试过不使用选项。append = TRUE的情况。$ H1 J5 I4 O" G" ]% k
来自Freenode的#R的Mr.Flick先生让我检查一下是否可以使用sqlQuery读空表,确实可以。, X) |. x2 @* I7 Q, `  ]
更新! F- k7 i0 q) p3 E/ I6 _
我已经完成了以下步骤:
4 I4 \, `! W3 i% t( ?' y; Y1 X, E[ol]我创造了一个ODBC连接直接连接到SQL Server在table =ortablename =语句中指定表的路径/ r4 {% T2 ]2 j& E8 m3 z
在SQL Server Management Studio中创表,如下所示[/ol]GO
% {: n* q' z6 d9 |1 W) U; HCREATE TABLE [dbo].[testing123]( [Person_DIMKey] [int] NULL ) ON[PRIMARY]
" S! V. u0 ]3 x1 TGO
5 j8 t- p0 r; O, L[ol]在sqlUpdate与我的新ODBC连接在一起使用RI中间,表名周围没有括号
  I2 |- ~3 v4 e" N# N, Y8 A现在,sqlUpdate()可以看到表,但它抱怨它需要一个唯一的列
7 b, }: `4 _' Y/ f: ?指示表中唯一的列是唯一的列,index = colname导致错误列不存在: \" B, i- d' r+ Z7 ?! Q1 I4 }
我删除并重新创建了指定主键的表,( J2 x5 |  G- n( B: [' n
[/ol]GO
% P3 X* E1 T, k, c& FCREATE TABLE [dbo].[jive_BNR_Person_DIMKey]( [jive_BNR_Person_DIMKey] [int]NOT NULL PRIMARY KEY ) ON [PRIMARY]+ j% y- `  f0 l( i! w/ [. {; b
GO
7 a8 A9 f/ M9 D: x生成名为“主键”和“索引”(根据SQL Sever Management Studio的GUI界面)文件
2 ?0 B) c3 g! P! A$ t; r  h+ vPK__jive_BNR__2754EC2E30F848ED0 z. x4 b% z: d7 k+ R# _* f- H
[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 table7 C  s! i! h2 I$ ?
为了记录,我为索引指定了正确的名(而不是 colname”);感谢MrFlick要求澄清。' a! o" s* o9 m$ g  o
此外,这些步骤在我的帖子中编号为1到7,但当列表显示时,StackOverflow将重置列表的号码几次。如果有人能帮我清理这篇文章的这方面,我将非常感激。# x( V3 b6 [* c% \; }$ a' y- b$ B! h* I
                                                                ( q  r& h; p- x2 c
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则