【发布时间】:2010-11-12 22:18:18
【问题描述】:
我开发了一个在线调查,将我的数据存储在 Microsoft SQL 2005 数据库中。我在 R 中对我的数据编写了一组异常值检查。这些脚本的一般工作流程是:
- 使用 sqlQuery() 从 SQL 数据库中读取数据
- 执行异常值分析
- 使用 sqlSave() 将违规的受访者写回单独的表中的数据库
我要回信的表具有以下结构:
CREATE TABLE outliers2(
modelid int
, password varchar(50)
, reason varchar(50),
Constraint PK_outliers2 PRIMARY KEY(modelid, reason)
)
GO
如您所见,我已将主键设置为 modelid 和 reason。同一受访者可能是多次检查的异常值,但我不想为任何受访者插入相同的模型 ID 和原因组合。
由于我们仍在收集数据,因此我希望能够在开发基于数据估计的模型时每天/每周更新这些脚本。这是我正在使用的sqlSave() 命令的一般形式:
sqlSave(db, db.insert, "outliers2", append = TRUE, fast = FALSE, rownames = FALSE)
db 是一个有效的 ODBC 连接,db.insert 的格式为
> head(db.insert)
modelid password reason
1 873 abkd WRONG DIRECTION
2 875 ab9d WRONG DIRECTION
3 890 akdw WRONG DIRECTION
4 905 pqjd WRONG DIRECTION
5 941 ymne WRONG DIRECTION
6 944 okyt WRONG DIRECTION
sqlSave() 在尝试插入违反主键约束的行并且不继续插入其他记录时会阻塞。我原以为设置fast = FALSE 会缓解这个问题,但事实并非如此。
关于如何解决这个问题的任何想法?我总是可以drop 第一个脚本开头的表格,但这似乎相当沉重,无疑会导致问题。
【问题讨论】:
标签: sql-server-2005 r rodbc