我一直在为这个问题搜索解决方案。尽管在这个论坛上已经多次讨论过这个特殊问题,但我没有得到任何正确答案。
我将从第三方获取可以包含单引号的数据。此数据需要插入到数据库中,当它包含单引号时,它会失败并抛出以下错误:
Msg 105, Level 15, State 1, Line 7
Unclosed quotation mark after the character string '
---以下是c ++代码,用于传递trandata作为输入以及其他参数,并从SQL服务器调用fn_stripsingleQuote10函数:
strSQLText = "declare @returnType as varchar(max)\n EXEC @returnType = CABINET..fn_stripsingleQuote10 ";
sqlTxtParams.Format("'%s', '%s', '%s', tranData, sing_quote, double_sing_quote);
strSQLText += sqlTxtParams;
----我的sql函数(fn_stripsingleQuote10)替换单引号
USE [cabinet]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[fn_stripsingleQuote10](
@strip varchar(Max),@patern varchar(5),@replace varchar(5)
)
returns varchar(Max) as begin
declare @CleanString varchar(Max)
SET @CleanString=(REPLACE(@strip,@patern, @replace))
return @CleanString
end
示例输出: 例如: 将@returnType声明为varchar(max)EXEC @returnType = CABINET..fn_stripsingleQuote10'fsds'd','''',''''''
我觉得我调用函数的方式不合适。请提供解决方案。
答案 0 :(得分:1)
严格来说,你正在寻找QUOTENAME
,这正是你所要求的:
'quote_character'
是一个单字符串,用作分隔符。 可以是单引号('),左括号或右括号([]), 或双引号(“)。
但是,您的代码很可能现在暴露给SQL注入,您应该实际使用参数。几乎从不 required 将输入连接到生成的执行SQL中。