搜索带有单引号的 where 子句的记录

Posted

技术标签:

【中文标题】搜索带有单引号的 where 子句的记录【英文标题】:Searching for records with where clause having single quotes 【发布时间】:2018-01-25 07:30:32 【问题描述】:

我有一个表列(nvarchar 类型),其中包含一个条目“XYZ INT'ABC”,我在 where 子句的存储过程中使用此列。因此,在 where 子句中添加条件时,应进行如下检查:

select * from tableName where ColumnName = 'XYZ INT''ABC';

从 VB.net 代码向 SP 传递参数时,参数正确传递,如上面的选择查询所示。但是 SP 使用以下查询进行搜索,因此我没有得到所提到的 where 子句的所需输出。

select * from tableName where ColumnName = 'XYZ INT''''ABC';

请帮忙。提前致谢。

【问题讨论】:

请出示VB.NET代码 我在 Vb.net 代码的过程参数中传递了正确的值。但是当我从 SQL 探查器中检查时,存储过程执行语句(XYZ INT''''ABC)中传递了错误的值。 在您的 VB 代码中,您不需要转义单引号,因此您的 VB 字符串应该看起来像 "XYZ INT'ABC" ,当传递给 sql server 以转义单引号时,这将加倍,您最终会得到'XYZ INT''ABC' 在 sql server 中 看来你传递的字符串已经加了双引号,按原样传递 是的...我将字符串从 XYZ INT'ABC 转换为 XYZ INT''ABC,然后将其分配给 Vb.net 代码中的参数值。将按照建议尝试解决方案。 【参考方案1】:

您已经在 cmets 中获得了一些建议。只是一些解释:

双引号实际上并不是字符串的一部分

DECLARE @SomeString VARCHAR(100) = 'With one quote''!';

您将在变量中找到的字符串是With one quote'!。双引号只是语法特性,它允许语句解析器查看引号是否终止字符串。像

DECLARE @SomeString VARCHAR(100) = 'With one quote'!'; --wrong!

...是错误的,因为字符串在quote 之后结束,而!' 突然出现语法错误。

只有在单引号是字符串标记的情况下才需要这个。在 VB.Net 中,如果您想在字符串中放置双引号 ",则会遇到同样的问题,但这在 SQL 中可以使用,如下所示:

DECLARE @SomeString VARCHAR(100) = 'With one double quote"!';

你必须考虑两面

如何赋值? (取决于您的 IDE 和语句解析器) 变量中存储的实际值是多少(将在运行时使用)

相关且更明显的示例:

你经常会看到这样的代码(作业)

string SomeString = "Some text/nwith a line-break";

翻译成(实际值)

Some text
with a line-break

【讨论】:

以上是关于搜索带有单引号的 where 子句的记录的主要内容,如果未能解决你的问题,请参考以下文章

从雪花sql中的where子句中删除单引号

sql查询语句,where条件中包含单引号的解决方案

即使插入了列,“WHERE”子句中的 SQL 未知列

数据库条件判断where 里面的单双引号用法。

oracle 如何插入带有引号''和连接符的字符串

如何用sql语句插入一个带有单引号的值