首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft服务器行按行插入

Microsoft服务器行按行插入
EN

Stack Overflow用户
提问于 2017-08-08 17:52:32
回答 1查看 154关注 0票数 0

我有一个for循环,通常写入一个平面文件。这样,如果有什么事情发生了,我可以从我停止的地方开始。我希望使用Server 2016存储过程中执行我的R代码的新RevoScaleR函数,将此过程直接转换为从SQL表中读取和写入。

下面是一个简单的SPROC:

代码语言:javascript
复制
USE [master]
GO

/****** Object:  StoredProcedure [dbo].[Rscript_geocodeUSACities_TEST]    Script Date: 8/8/2017 11:40:40 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




CREATE PROCEDURE [dbo].[Rscript_geocodeUSACities_TEST]
    @usrOutputFilePath varchar(150)
    ,@usrOutputFileName varchar(150)

AS
BEGIN

    SET NOCOUNT ON;

DECLARE @rScript nvarchar(max) = N'

#### USER INPUTS ####

usrOutputFile <- "' + @usrOutputFilePath + @usrOutputFileName + '"


#### ESTABLISH ENVIRONMENT ####

library(data.table)
library(foreach)
library(XML)
library(RCurl)
library(RJSONIO)

##turn off scientific notation
options(scipen=999)

##establish compute context
sqlServerConnString <- "Server=.;Database=External;Trusted_Connection=true"
sqlServerCC <- RxInSqlServer(connectionString=sqlServerConnString)
rxSetComputeContext(sqlServerCC)
print(rxGetComputeContext())


#### GEOCODE ####

print(dfInputData)
rxDataStep(data=dfInputData,outFile=imp.USA_Cities_Map,append="rows")

'

EXECUTE  sp_execute_external_script
                @language = N'R'
              , @script = @rScript
              ,@input_data_1 =N'select 5 as test_insert'
            ,@input_data_1_name =N'dfInputData'
              ;

END

错误输出:

代码语言:javascript
复制
Error in rxDataStep(data = dfInputData, outFile = imp.USA_Cities_Map,  : 
  object 'imp.USA_Cities_Map' not found
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 19:36:58

这就是你要的。不需要将计算上下文设置为Server。但是,您必须将登录权限授予运行R外部进程的本地用户。它们都被添加到一个名为SqlRUserGroup的本地组中,您只需要用服务器名替换'dbrownebook‘。

请注意,您没有为sqlrusergroup添加数据库用户,而是只添加登录名。Services将模拟调用sp_execute_external_script的用户。这在以下几个方面得到了解释:https://learn.microsoft.com/en-us/sql/advanced-analytics/r/security-considerations-for-the-r-runtime-in-sql-server

代码语言:javascript
复制
use master
go

create login [dbrownebook\sqlrusergroup] from windows

create database [External]

go

use [External]
go

create schema imp
go
create table imp.USA_Cities_Map(test_insert int)
go


/****** Object:  StoredProcedure [dbo].[Rscript_geocodeUSACities_TEST]    Script Date: 8/8/2017 11:40:40 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




CREATE OR ALTER PROCEDURE [dbo].[Rscript_geocodeUSACities_TEST]
    @usrOutputFilePath varchar(150)
    ,@usrOutputFileName varchar(150)

AS
BEGIN

    SET NOCOUNT ON;

DECLARE @rScript nvarchar(max) = N'

sqlServerConnString <- "Server=.;Database=External;Trusted_Connection=true"
sqlTable <- RxSqlServerData(table = "imp.USA_Cities_Map", connectionString = sqlServerConnString)

rxDataStep(data=dfInputData,outFile=sqlTable,append="rows")
rxDataStep(data=dfInputData,outFile=sqlTable,append="rows")
rxDataStep(data=dfInputData,outFile=sqlTable,append="rows")

'

EXECUTE  sp_execute_external_script
                @language = N'R'
              , @script = @rScript
              ,@input_data_1 =N'select 5 as test_insert'
            ,@input_data_1_name =N'dfInputData'
              ;

END

GO

exec [Rscript_geocodeUSACities_TEST] '',''

go
select * from imp.USA_Cities_Map
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45574968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档