声明Where子句的变量

时间:2013-10-23 15:02:04

标签: sql sql-server

我确信这是一个简单的问题,但我想知道如何声明不同的变量,以便它们成为where子句的一部分,具体取决于用户选择的内容?

例如,我有一个带有组合框的Excel电子表格,其中包含从数据库(美国,英国,澳大利亚)提取的国家/地区列表,具体取决于用户选择的国家/地区将会过滤并过滤该数据。问题出现在数据表中,查询从值(US,UK,AU)中拉回结果。

也许我可以构建映射表?我确信我可以使用declare来做到这一点。

非常感谢任何有关构建此方法的最佳方法的建议。

3 个答案:

答案 0 :(得分:2)

我认为你所要求的是

SELECT tbl.* 
FROM tbl
WHERE col1 = CASE WHEN @param='United Kingdom' THEN 'UK' ... END

您可能需要考虑的是查找表

SELECT tbl.*
FROM tbl
JOIN loc ON loc.id = tbl.loc_id
WHERE loc.name = @param

答案 1 :(得分:1)

您可以在表格中添加一个具有完整国家/地区名称值的LongName列。

另一个选择是拥有一个单独的Country表,将您的其他表更改为引用CountryID作为外键(而不是具有UK,US等列),并让您的国家/地区表具有ShortName(例如UK,美国,AU)和LongName(例如英国,美国,澳大利亚)专栏。然后,您可以加入国家/地区表格以获取完整的国家/地区名称。

答案 2 :(得分:1)

最简单的方法: 创建一个新的数据集并将其存储在某个地方(例如,进入临时塔),然后声明变量并使用数据集作为它的数据源。

           declare @Country as varchar(50)

使用where子句中的变量来过滤结果集:

           Select tbl.* 
           from tbl tbl 
           where tbl.country = @Country

在您的情况下,组合框应基于您在过滤期间要使用的值。这就是为什么你可以使用类似的东西:

select distinct tbl.country
from table tbl 

并将生成的结果用作DropDown的源

另一种方法是使用CASE

  ,case when country = 'Australia' then 'AU'
   , case when country = 'United Kingdom' then 'UK'
.....

由于