更改 SQL 使用 RODBC 的函数即时查询
Changing SQL Query on the fly with function using RODBC
我正在创建一个函数,它将使用 RODBC 包从我的 MS SQL 数据库中提取数据。我目前有一个函数可以在其中提取数据,但是我似乎无法让原始变量 (x) 按预期运行。我将 T 作为虚拟变量以确保函数 运行.
但最终我希望能够输入 trial(-CHIP TRAY) 或 trial("-CHIP TRAY"),并让 PartNumber = -CHIP TRAY ,这样我就可以使用函数并返回正确的数据。
现在可以正常使用,但无法按预期更改 PartNumber。
trial <- function(x){T=x;
ch <<- odbcConnect("Comp", uid = "user", pwd = "passw");
odbcSetAutoCommit(ch, FALSE);
sqlTables(ch, tableType = "TABLE");
sqlColumns(ch, "Completions");
machines <<- sqlQuery(ch, paste("SELECT WC_or_machine FROM Completions",
"WHERE PartNumber = '-CHIP TRAY'"));
working <<- sqlQuery(ch, paste("SELECT partmadeperhour FROM Completions",
"WHERE PartNumber = '-CHIP TRAY' AND endtime > '2012-12-31 23:59:00'")); T}
所以你可以看到我唯一的结果是 vars 机器和工作,它们直接取自 SQL(我 select 列下的任何内容与我的 SQL 查询) 并且最终结果将根据我输入的 X 值来指导查询而改变。问题似乎是,一旦 R 查看 sqlQuery 命令,它就会停止解释(因此它不会用我给 X 的任何值替换 X)。它只是将我的 SqlQuery 传递给数据库并 returns 结果。有办法解决这个问题吗?
这是我希望它正常工作的样子,但是一旦我 运行 函数,我作为 X 输入的任何内容都会被 SqlQuery 忽略。
trial <- function(x){T=x;
ch <<- odbcConnect("Comp", uid = "user", pwd = "passw");
odbcSetAutoCommit(ch, FALSE);
sqlTables(ch, tableType = "TABLE");
sqlColumns(ch, "Completions");
machines <<- sqlQuery(ch, paste("SELECT WC_or_machine FROM Completions",
"WHERE PartNumber = 'T'"));
working <<- sqlQuery(ch, paste("SELECT partmadeperhour FROM Completions",
"WHERE PartNumber = 'T' AND endtime > '2012-12-31 23:59:00'")); T}
感谢您的帮助!!
尝试将粘贴更改为以下内容:
T <- "-CHIP TRAY"
T
#[1] "-CHIP TRAY"
paste0("SELECT partmadeperhour FROM Completions
WHERE PartNumber = '",T,"' AND endtime > '2012-12-31 23:59:00'")
#"SELECT partmadeperhour FROM Completions\n WHERE PartNumber = '-CHIP TRAY' AND endtime > '2012-12-31 23:59:00'"
我正在创建一个函数,它将使用 RODBC 包从我的 MS SQL 数据库中提取数据。我目前有一个函数可以在其中提取数据,但是我似乎无法让原始变量 (x) 按预期运行。我将 T 作为虚拟变量以确保函数 运行.
但最终我希望能够输入 trial(-CHIP TRAY) 或 trial("-CHIP TRAY"),并让 PartNumber = -CHIP TRAY ,这样我就可以使用函数并返回正确的数据。
现在可以正常使用,但无法按预期更改 PartNumber。
trial <- function(x){T=x;
ch <<- odbcConnect("Comp", uid = "user", pwd = "passw");
odbcSetAutoCommit(ch, FALSE);
sqlTables(ch, tableType = "TABLE");
sqlColumns(ch, "Completions");
machines <<- sqlQuery(ch, paste("SELECT WC_or_machine FROM Completions",
"WHERE PartNumber = '-CHIP TRAY'"));
working <<- sqlQuery(ch, paste("SELECT partmadeperhour FROM Completions",
"WHERE PartNumber = '-CHIP TRAY' AND endtime > '2012-12-31 23:59:00'")); T}
所以你可以看到我唯一的结果是 vars 机器和工作,它们直接取自 SQL(我 select 列下的任何内容与我的 SQL 查询) 并且最终结果将根据我输入的 X 值来指导查询而改变。问题似乎是,一旦 R 查看 sqlQuery 命令,它就会停止解释(因此它不会用我给 X 的任何值替换 X)。它只是将我的 SqlQuery 传递给数据库并 returns 结果。有办法解决这个问题吗?
这是我希望它正常工作的样子,但是一旦我 运行 函数,我作为 X 输入的任何内容都会被 SqlQuery 忽略。
trial <- function(x){T=x;
ch <<- odbcConnect("Comp", uid = "user", pwd = "passw");
odbcSetAutoCommit(ch, FALSE);
sqlTables(ch, tableType = "TABLE");
sqlColumns(ch, "Completions");
machines <<- sqlQuery(ch, paste("SELECT WC_or_machine FROM Completions",
"WHERE PartNumber = 'T'"));
working <<- sqlQuery(ch, paste("SELECT partmadeperhour FROM Completions",
"WHERE PartNumber = 'T' AND endtime > '2012-12-31 23:59:00'")); T}
感谢您的帮助!!
尝试将粘贴更改为以下内容:
T <- "-CHIP TRAY"
T
#[1] "-CHIP TRAY"
paste0("SELECT partmadeperhour FROM Completions
WHERE PartNumber = '",T,"' AND endtime > '2012-12-31 23:59:00'")
#"SELECT partmadeperhour FROM Completions\n WHERE PartNumber = '-CHIP TRAY' AND endtime > '2012-12-31 23:59:00'"