SQL Server使用多种数据类型



我无法提出一个更好的标题。

我有一个值列表:

List<string> ids = new List<string>() {"1", "AND", "2", "NOT", "3"}

和一个包含上面列表中指定的ID的数据库表。我的问题是我需要基于ID检索数据,包括表中未找到的值(上面列表的操作员ANDNOT(。例如,使用上面的列表,在阅读了123的DB值之后,将创建一个新列表,例如:

List<string> values = {"Value1", "AND", "Value2", "NOT", "Value3"}

操作员ANDORNOT)(只是MyTable中未找到的简单字符串。

到目前为止,我一直在拆分ID,对于每个值,我都会前往DB并获得值。问题在于,即使对于2K列表,也需要大量时间。列表每个值约10个值。

我正在考虑的是使用where in子句,该子句将有望减少到数据库的旅行。不幸的是,我不知道如何从第一个列表中处理操作员。(运算符未保存在MyTable中(。

我尝试使用多个条件,但是我无法将操作员(字符串(转换为int(ID列的类型(。

我尝试过的查询:

SELECT Title
  FROM MyTable where Id =1 or Id = cast('AND' as int)

SELECT Title
  FROM MyTable where Id in (1,2,'AND') 

他们两个都失败(正确(,因为SQL无法将AND转换为数据类型int

我想要的是将where子句(或任何其他(用于第一个列表,而在数据库中找不到结果,返回查询中使用的值。例如,对于查询:

 SELECT Title
      FROM MyTable where Id in (1,2,'AND') 

我想从DB Value1Value2AND接收。我知道执行查询时不能保证订单。

如何有效地解决这个问题?我正在使用c#sql server 2012一起使用任何ORM

首先,您需要提取需要转换的那些列表条目,即从列表中提取搜索键。

完成后,您可以这样查询:

select id, title from MyTable where id in ( /* list goes here*/)

将查询的结果加载到Dictionary<int,string>中。

然后,第二次浏览列表,用字典中的值替换键。

如果您发现SQL查询执行不佳,则应查看索引和查询提示,或再次索要更快的查询。

为什么这可能会改善性能

主要原因是它将减少到数据库的旅行。但是,如果数据库在同一物理机器上,则不太可能很重要。

另外,如果键和标题的列表不经常更改,并且可以稍微过时,则可以将整个内容加载到字典中。100,000个条目并不多 - 如果它们是50个字节,每个字节只有5 MB,而现代服务器上的数字不多。

您可以尝试在SQL-Query

中施放ID
SELECT Title
FROM MyTable where cast(Id as nvarchar) in (1,2,'AND')

,这将大大降低您的性能

相关内容

  • 没有找到相关文章

最新更新