RODBC:在存储过程中传递空值
我有一个存储过程,它返回阿姆斯特丹某个地区的子区。要连接我的sql server并从数据库中获取数据,我使用RODBC 这是我用来获取所有子区的代码:RODBC:在存储过程中传递空值,r,stored-procedures,rodbc,R,Stored Procedures,Rodbc,我有一个存储过程,它返回阿姆斯特丹某个地区的子区。要连接我的sql server并从数据库中获取数据,我使用RODBC 这是我用来获取所有子区的代码: #stored procedure: all subdistricts subdistricts_amsterdam <-function(Region = "G4", State = "NH", City = "Amsterdam", District = NULL){ dbhandle <- connect() data
#stored procedure: all subdistricts
subdistricts_amsterdam <-function(Region = "G4", State = "NH", City = "Amsterdam", District = NULL){
dbhandle <- connect()
data <- sqlQuery(channel = dbhandle,
query = paste("exec dbo.SP_AllSubDistricts @Region='", Region, "', @State='", State, "', @City='", City, "', @District='", District,"';", sep = ""), errors = TRUE)
odbcClose(dbhandle)
return(data)
}
我希望这个函数返回阿姆斯特丹的所有子区。但很明显,它不是这样工作的。但是当我调用某个区域的函数时,我会得到相应区域的所有子区域
请提供帮助R中SQL的NULL等效于一个缺失值而非NULL未定义值。从文件中可以看出: NULL表示R中的NULL对象:它是一个保留字。空是 通常由值为的表达式和函数返回 未定义 NA是长度为1的逻辑常数,其中包含缺少的值 指标 因此,在函数中考虑传递NA。这样做时,不应引用NA,因此应添加一个ifelse以进行有条件的调整
#stored procedure: all subdistricts
subdistricts_amsterdam <-function(Region = "G4", State = "NH",
City = "Amsterdam", District = NA){
dbhandle <- connect()
data <- sqlQuery(channel = dbhandle,
query = paste("exec dbo.SP_AllSubDistricts @Region='", Region, "',
@State='", State, "', @City='", City, "', @District=",
ifelse(is.na(District), District,
paste0("'", District, "'")), ";", sep=""),
errors = TRUE)
odbcClose(dbhandle)
return(data)
}
明显不同于
从表格名称中选择*其中城市='Amsterdam'和地区为空
在TSQL中使用条件以省去区域筛选器
如果@District为空
开始
从TableName中选择*,其中城市=@City
终止
其他的
开始
从表格名称中选择*,其中城市=@City和地区=@District
终止