0

我正在研究 Sql server 并尝试做不同的例子。你能建议我在这种情况下使用什么吗?下面是我的 ckecklist(不是复选框,在不同的窗口中作为列表打开):

Colors 
   Red
   Blue
  White
  Black
  Green

从表 item.colors

想要根据选择的记录提供搜索。例如,假设选择了“红色”和“蓝色”,并且希望从表中获取相关记录作为输出。

Colors
  Red     v
  Blue    v
  White
  Black 
  Green

所以输出:

  id    Name      Colors
  1    T-shirt    Red      
  2    Boots      Blue    

任何建议如何做到这一点?即使使用参数,那么在数百条记录的情况下该怎么办?我们不能有 100 个参数)

4

1 回答 1

0

您可以使用两个选项(可能更多):

A. 使用字符串参数

首先,在应用程序中将您的值连接成单个字符串并将其作为一个 varhcar 参数发送。它可能看起来像这样:'Red;Blue'(或者可能是一些 ID)。之后 SQL 过程应该将字符串拆分回值列表并将其放入#temp 表中。网络上有很多字符串拆分功能。您可以轻松地搜索它或查看此链接以获取一些想法:如何拆分字符串以便访问项目 x? 最终只需将#temp 表中的值与您的表连接起来即可获得所需的数据。

B. XML

这是一个更“花哨”的选择。将您的值从应用程序放入 XML 并将其作为 XML 参数传递给存储过程。我不知道您使用哪种编程语言,但应该有提供的方法来执行此操作。然后在您的过程中 - 如果您知道如何 - 您可以直接将 XML 参数与您的表连接以过滤数据,或者您可以再次将它们溢出到 #temp 表。再一次,那里有大量关于如何使用 XML 的信息。一些示例: 从 SQL Server 2008 中的 XML 字段中选择值 http://blog.sqlauthority.com/2010/06/23/sqlauthority-news-guest-post-select-from-xml-jacob-sebastian/

编辑:(第三种选择,最简单,但我不推荐)

C. 动态 SQL

就像在选项 A 中一样创建连接字符串,但在过程内部 - 不要将其拆分回值,而只需使用 SELECT 语句将其粘合到字符串并使用 sp_executesql 或 EXEC。

SET @sql = 'SELECT * FROM YourTable WHERE Color IN (' + @parameter + ')'
EXEC(@sql)
于 2013-03-28T08:42:58.563 回答