搜索where子句具有单引号

时间:2018-01-25 07:30:33

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

我有一个表格列(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';

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你已经在评论中提出了一些建议。只是一些解释:

加倍的引号实际上不是字符串的一部分

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