使用 R Service 将带有引号的字符串作为输入参数传递给 SQL Server 2016 存储过程

Pass string with quotes as input parameter to a SQL Server 2016 stored procedure using R Service

我正在使用 SQL 带有 R 服务的 Server 2016。我正在尝试创建一个存储过程,我想执行插入文本作为参数值。

e.g. exec test N'Hello World' 

通常它工作正常,但如果输入包含引号的文本,它会显示错误。

这是我的示例存储过程:

CREATE PROCEDURE [dbo].[test] 
    (@param1 NVARCHAR(MAX)) 
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @sql VARCHAR(MAX)
    SET @sql = 'select = ''' + @param1 + ''';'

    PRINT(@sql)
    EXEC sp_execute_external_script 
               @language = N'R', 
               @script = N'data<-mynumbers 
                            OutputDataSet<-data.frame(data)',
               @params = N' @mynumbers nvarchar (max)',
               @mynumbers = @sql
 END

如果我执行程序插入文本作为包含单引号或多引号的参数值(例如,不要、不能、Tom's),它会显示错误:

exec test N' Don't do late making Tom's work '

错误:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'ot'.

Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string ''.

问题是单引号是 SQL 中的字符串标识符,例如单引号 "delimits" 字符串。如果你想在字符串中使用单引号,你需要 "double" 它们。你的例子是:

exec test N' Don''t do late making Tom''s work '

希望对您有所帮助。

尼尔斯