Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 替换SQL Server中的单引号_Sql Server_Replace_Error Handling - Fatal编程技术网

Sql server 替换SQL Server中的单引号

Sql server 替换SQL Server中的单引号,sql-server,replace,error-handling,Sql Server,Replace,Error Handling,我在SQL Server中有这个函数来替换单引号 但是当我插入一个单引号时,它会在Replace(@strip,“,”)上抛出一个错误: 必须在SQL语句到达数据库之前对用户输入()中的单引号进行条带化/替换/跳过操作。请尝试REPLACE(@strip','') SQL使用两个引号表示字符串中的一个引号。尝试用一个引号转义单引号: Replace(@strip, '''', '') 您需要将单引号加倍,如下所示: REPLACE(@strip, '''', '') 除了需要转义引号(通过使

我在SQL Server中有这个函数来替换单引号

但是当我插入一个单引号时,它会在
Replace(@strip,“,”)上抛出一个错误


必须在SQL语句到达数据库之前对用户输入()中的单引号进行条带化/替换/跳过操作。

请尝试
REPLACE(@strip','')


SQL
使用两个引号表示字符串中的一个引号。

尝试用一个引号转义单引号:

Replace(@strip, '''', '')

您需要将单引号加倍,如下所示:

REPLACE(@strip, '''', '')

除了需要转义引号(通过使用双引号),您还混淆了变量的名称:您使用的是@var和@strip,而不是@CleanString和@strStrip…

如果您确实必须完全去掉单引号,您可以这样做:

Replace(@strip, '''', '')
但是,通常您会将“替换为”,这将使SQL Server在查询数据库时感到高兴。任何内置SQL函数(如replace)的诀窍在于它们也需要您将单引号加倍

因此,要将代码中的“替换为“”,请执行以下操作:

Replace(@strip, '''', '''''')

当然。。。在某些情况下,如果在查询数据库时使用参数,则可以完全避免这样做。假设您正在从.NET应用程序查询数据库,那么您将使用为查询提供SqlCommand参数,所有单报价业务将自动处理。这通常是首选方法,因为SQL参数也有助于防止攻击。

看起来您正在尝试复制该功能。此内置函数可用于在字符串中添加分隔符和正确转义分隔符,并可将单引号和双引号识别为分隔符,以及括号
[
]

我认为这是最短的SQL语句:

CREATE FUNCTION [dbo].[fn_stripsingleQuote] (@strStrip varchar(Max))
    RETURNS varchar(Max)
AS
BEGIN    
    RETURN (Replace(@strStrip ,'''',''))
END

我希望这会有所帮助!

如果用另一个单引号转义单引号对您不起作用(就像我最近的一次REPLACE()查询不起作用一样),您可以在查询前禁用SET QUOTED\u IDENTIFIER,然后在查询后启用SET QUOTED\u IDENTIFIER

比如说

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER OFF;
您可以使用char(39)

或者在这种情况下:

Replace(@strip,char(39),'')

我在这里遇到了一个奇怪的异常情况。使用GoogleAPI并获得XML格式的回复,由于单引号,它无法转换为XML数据类型

更换(@Strip,'','')

无法工作,因为单引号是ascii字符146而不是39。 所以我用了:

替换(@Strip,char(146),“”)

它也适用于常规单引号字符(39)和任何其他特殊字符。

从[dbo].[Db Name].中选择替换(colname,'','')作为colname,尝试以下操作:

select replace (colname, char(39)+char(39), '') AS colname FROM .[dbo].[Db Name];
我已经达到了预期的效果。 示例:输入值-->如“%Pat”)“”或


使用上面的查询获得了期望的结果。

也可以在插入上完成,因此管理员不仅在DBA上,这意味着对sql注入开放的存储过程是可以的。我不同意这一暗示。如果与服务器实例交互的编码员试图故意创建sql注入攻击怎么办在T-SQL/数据库端进行的验证/卫生工作,尤其是@JohnDhomIt所暗示的存储过程,似乎OP不理解为什么在单引号中加单引号不起作用。更改标识符的引用方式不太可能解决这一问题。此外,这个问题已经存在3年了……OP说他的函数pose是替换一个单引号。我的解决方案确实是实现该功能的有效方法。此外,如果其他用户发现此问题的答案对replace()没有帮助,就像我的情况一样,这个解决方案可能确实有帮助。简言之,我的答案可能对其他人有帮助,如果不一定是OP。如果一个问题对社区有帮助,那么问题的年龄又有什么区别呢?我面临着同样的问题,但使用您的技术,我得到了
语法错误,意外的“”(T_常量\u ENCAPSED_字符串)
QUOTENAME用于T-SQL标识符。不幸的是,它不适用于数据。没有ASCII字符146。扩展ASCII定义了其他字符,如一些国际字符、图形和符号。
char(146)
对应于该字符集中的拉丁字母。如果该表达式有效,则它与任何有意义的东西都不对应。感谢您提供的提示,我正在寻找如何将“替换为“”:)此解决方案的优点是在某些情况下更容易阅读。谢谢。这一直是我的首选方法。双精度和四精度ruple引号看起来很乱,很难维护。谢谢提醒。
Replace(@strip,char(39),'')
select replace (colname, char(39)+char(39), '') AS colname FROM .[dbo].[Db Name];
      Want Output -->  *Like '%Pat') OR*