C# 如何将值与ntext列进行比较?

C# 如何将值与ntext列进行比较?,c#,asp.net,sql,sql-server-2008,C#,Asp.net,Sql,Sql Server 2008,我正在从事一个项目,其中我正在将itextsharp提取的pdf文本保存在sql server数据库的一列中。对于某些要求,我必须通过将文档文本作为过程的参数来搜索文档。我的代码是 @docText varchar(8000) select * from document d where convert(varchar(8000),d.text) = @docText 问题是,当文档文本大小小于8000(例如2600)时,它不与此查询匹配,并且在上面的查询中,我们不能将大

我正在从事一个项目,其中我正在将itextsharp提取的pdf文本保存在sql server数据库的一列中。对于某些要求,我必须通过将文档文本作为过程的参数来搜索文档。我的代码是

   @docText varchar(8000)

   select * from document d

   where convert(varchar(8000),d.text) = @docText
问题是,当文档文本大小小于8000(例如2600)时,它不与此查询匹配,并且在上面的查询中,我们不能将大小设置为convert(varchar(len(@docText)),d.text)


如何将列(文本)大小设置为动态传递给过程的参数大小。

我的第一个想法是您需要:

declare @docText varchar(max);

select *
  from document d
 where d.text = @docText;
VARCHAR(MAX)
是一种可容纳大小从0字节到2 GB的任何VARCHAR的类型。因为它的易变性,所以被称为变化字符。尾随空格自动被认为是不重要的,即
ABCDEF\uuuuuu\uuu=ABCDEF
(第一个有5个尾随空格)

因此(尾部空间处理),不需要
转换(varchar(),text)

d.text
定义为什么类型?如果它是VARCHAR(8000),那么我建议将它升级到VARCHAR(MAX)。一本书肯定有8000多个字

您确定没有用字符填充输入@docText以组成8000个字符,例如添加尾随点或字节(0)字符吗?

试试这个

其中Charindex(d.text,@docText)>0

尝试:

这应该将文本值转换为可以方便地使用比较的内容,并允许您在文档中的任何位置搜索特定的文本块

如果你想使用全文搜索,你也应该考虑。


下一件事是,您确实需要将文本字段更改为varchar(max),因为不推荐使用文本。这是需要对数据库进行的关键更改。没有理由任何2008年的数据库仍然使用text或ntext数据类型。如果不对不推荐的项目进行更改,则会导致升级路径比删除该功能时更痛苦(通常在删除不推荐的项目之前需要多次数据库升级),最终意味着无法升级。这种类型的数据库维护需要在您想要升级之前很久进行和测试。

d.text的类型是ntext,我在保存和阅读它之前已经从文本中删除了空格。我尝试了您的建议,但没有显示结果。因为d.text的类型是ntext,所以无法工作。您尝试过将d.text转换为varchar吗
其中Charindex(convert(varchar(max),d.text),@docText)>0
是,我尝试过,但仍然没有结果可能重复。由于您不能使用
=
,但是请注意第二页上的声明,其中指出不应再使用
ntext
declare @docText varchar(max)
set @doctext = 'test'
select * from document d
where convert(varchar(max),d.text) like '%' +@docText+ '%'