我正在研究Sql server并尝试做不同的例子。 你可以建议我在这种情况下使用什么。 下面是我的ckecklist(不是复选框,在列表的不同窗口中打开):
Colors
Red
Blue
White
Black
Green
来自table item.colors
希望根据所选记录提供搜索。 例如,假设选择“红色”和“蓝色”,并且输出想要从表中获取相关记录。
Colors
Red v
Blue v
White
Black
Green
所以输出:
id Name Colors
1 T-shirt Red
2 Boots Blue
有任何建议如何做到这一点?即使使用参数然后在数百条记录的情况下该做什么?我们不能有100个参数)
答案 0 :(得分:0)
您可以使用两种选项(可能更多):
一个。使用String参数
首先,在应用程序中将值连接成单个字符串,并将其作为一个varhcar参数发送。它可能看起来像这样:'红色;蓝色'(或者可能是一些ID)。之后SQL过程应该将字符串拆分回值列表并将其放在#temp表中。网上有很多字符串拆分功能。您可以轻松地谷歌搜索它或查看此链接以获取一些想法:How do I split a string so I can access item x? 最终只需将#temp表中的值与表格连接起来即可获得所需的数据。
B中。 XML
这是一个更“花哨”的选择。将应用程序中的值放入XML中,并将其作为XML参数传递给存储过程。我不知道你使用什么编程语言,但应该有一个提供的方法来做到这一点。在您的过程中 - 如果您知道如何 - 您可以直接将XML参数与表一起加入以过滤数据,或者,您可以再次将它们溢出到#temp表。再一次,有很多关于如何使用XML的信息。一些例子: Select values from XML field in SQL Server 2008 http://blog.sqlauthority.com/2010/06/23/sqlauthority-news-guest-post-select-from-xml-jacob-sebastian/
编辑:(第三种选择,最简单,但我不推荐)
℃。动态SQL
创建连接字符串,就像在选项A中一样,但在内部过程中 - 不要将其拆分回值,而只是将其粘贴到带有SELECT语句的字符串并使用sp_executesql或EXEC。
SET @sql = 'SELECT * FROM YourTable WHERE Color IN (' + @parameter + ')'
EXEC(@sql)