使用 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 '
希望对您有所帮助。
尼尔斯
我正在使用 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 '
希望对您有所帮助。
尼尔斯