搜索带有单引号的 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 子句的记录的主要内容,如果未能解决你的问题,请参考以下文章