首页 > 解决方案 > 在 R 中使用单引号的数据框列上的 sqlsave 命令使用转义字符?

问题描述

我在 R 中有一个包含多列的数据框。我想将此数据框写入 SQL Server 数据库表。我使用带有 sqlsave 命令的 RODBC 包。该命令运行良好,直到您点击其中一个名称带有单引号的列 (Kevin O'Donnell)。我想在 ' 之前写一个转义字符以将此行插入数据框中。

这是我尝试过的:

sqlSave(dbhandle,df,tablename = "DBTable",append = TRUE,
        rownames = TRUE, colnames = FALSE, verbose = TRUE, safer = TRUE, 
        addPK = TRUE, typeInfo, 
        varTypes, fast = FALSE, test = FALSE, nastring = NULL)
#Error here is
sqlwrite returned 
42000 102 [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'Donnell'.
42000 105 [Microsoft][SQL Server Native Client 11.0][SQL Server]Unclosed quotation mark after the character string ' )'

df$MerchantName = gsub("'","\'",df$MerchantName)

它没有用'替换'来帮助转义字符

标签: r

解决方案


保留其余代码,但尝试将 gsub 行更改为:

df$MerchantName = gsub("'","\\'",df$MerchantName, fixed=TRUE)

请注意您需要如何转义转义,以确保它作为字符串的一部分传递给您的 sql 服务器所在的外部服务。

还要注意fixed=TRUE以确保它确实做了它应该做的事情。

编辑:

添加了 fixed=TRUE 以跳过原本会取消双反斜杠的正则表达式评估。

编辑2:

试试这个转义:

df$MerchantName = gsub("'","''",df$MerchantName, fixed=TRUE)

有时使用双单引号来转义单引号。


推荐阅读