【发布时间】:2015-06-17 14:16:58
【问题描述】:
我的 Windows 窗体应用程序中有更多控件(假设有 10 个带有文本框、下拉菜单、单选按钮的控件)用于过滤并非强制的数据,因此用户可以使用 1 个或更多控件过滤数据。
现在我必须创建一个存储过程,用于根据输入过滤数据。
例如:如果用户在 1 个文本框控件中输入了一些文本,而剩下的 9 个控件的数据为空,我必须仅根据用户输入的那个文本框来过滤数据。
如果用户在 1 个文本框控件和 1 个下拉列表中输入了一些文本,而剩下的 8 个控件的数据为空,我必须仅根据用户输入的那个文本框和下拉列表来过滤数据。
我该怎么办?
在源代码中:
如果用户在任何控件上输入/选择文本,我将值作为参数传递,否则我将作为“null”传递给其余所有其他参数。
在存储过程中:
我给出了所有 10 个控件参数以从源代码中获取值,基于我正在过滤数据的参数。
if @Param1=null && @Param2=null && @Param3='SomeText'
begin
sELECT * FROM tABLE1 wHERE TableCOLUMN3=@Param3
END
if @Param1=null && @Param2='SomeText' && @Param3='SomeText'
begin
sELECT * FROM tABLE1 wHERE TableCOLUMN2=@Param2 AND TableCOLUMN3=@Param3
END
注意:我需要将每个表列的数据过滤到每个参数,简单假设@Param1--TableCOLUMN1,@param2--TableCOLUMN2,过滤器取决于参数文本。
如果我这样做,我的存储过程会更大,因为我有 10 个参数要检查(仅供参考,我在示例上方给出了 3 个参数)。
我想要的是:
由于我给出了 10 个参数,因此基于具有值的参数(除 NULL 之外的一些文本),我只需要使用 where 条件过滤数据。
有没有其他方法可以做到这一点,或者有人有其他方法可以做到这一点吗?
【问题讨论】:
标签: sql sql-server sql-server-2008