【问题标题】:sqlSave pads numeric/integer with spacesqlSave 用空格填充数字/整数
【发布时间】:2015-08-05 12:23:33
【问题描述】:

我有一些数据要上传到数据库中的表中。例如:

df <- data.frame(name = c("Fred", "George", "David"), data = c(10, 100, 1000))

但是,当我使用 RODBC::sqlSave 函数(使用 fast = FALSE 一次插入一行)时,它会用空格填充数字或整数值。所以在数据库中,data 列下的条目将是" 10", " 100", "1000"。因此,例如,如果我要上传上述数据框,然后使用以下命令查询该数据

tmp = RODBC::sqlQuery(ch, query = "SELECT * FROM My_Tbl")

然后输出将如下所示:

> str(tmp)
'data.frame':   3 obs. of  2 variables:
$ name : chr "Fred" "George" "David"
$ data : chr "  10" " 100" "1000"

data 列的数据库数据类型为varchar(10) 类型,因为数据有时具有前导字母。然而,在我正在处理的情况下,只涉及数字。

我的问题是为什么sqlSave 函数会填充数字数据,我能做些什么来阻止它这样做吗?

注意:我知道是sqlSave 函数导致了问题,因为当我使用verbose = TRUE 时,我可以看到INSERT 语句的输出并且确实有填充数据。此外,这是出于示例目的而组成的数据。

【问题讨论】:

    标签: r rodbc


    【解决方案1】:

    借助 sqlSave:

    如果 fast = FALSE,所有数据都作为字符串发送。如果快= TRUE、整数和双精度向量作为类型 SQL_C_SLONG 和 SQL_C_DOUBLE。

    所以试试不带fast=FALSE 选项。你也可以试试typeInfo 选项。

    【讨论】:

    • 不幸的是,我必须使用fast = FALSE,因为我使用的是 SQL Server 2005(我无法更改此设置),而fast = TRUE 使用的是 SQL Server 2008 及更高版本的语法,这使得 R 对我来说崩溃了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2016-09-24
    • 2012-10-05
    相关资源
    最近更新 更多