【问题标题】:Searching for records with where clause having single quotes搜索带有单引号的 where 子句的记录
【发布时间】: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 代码中的参数值。将按照建议尝试解决方案。

标签: sql-server vb.net stored-procedures nvarchar single-quotes


【解决方案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

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多