我正在研究将要查询我们员工数据库的工作申请.最终用户希望能够根据标准名称/部门标准进行搜索,但他们也希望灵活地查询在卫生部门工作的名为“James”的所有人.我想避免的一件事是简单地使存储过程获取参数列表并生成一个sql语句来执行,因为这将打开内部级别的sql注入门.
这可以做吗
解决方法
虽然COALESCE的技巧很整洁,但我的首选方法是:
CREATE PROCEDURE ps_Customers_SELECT_NameCityCountry @Cus_Name varchar(30) = NULL,@Cus_City varchar(30) = NULL,@Cus_Country varchar(30) = NULL,@Dept_ID int = NULL,@Dept_ID_partial varchar(10) = NULL AS SELECT Cus_Name,Cus_City,Cus_Country,Dept_ID FROM Customers WHERE (@Cus_Name IS NULL OR Cus_Name LIKE '%' + @Cus_Name + '%') AND (@Cus_City IS NULL OR Cus_City LIKE '%' + @Cus_City + '%') AND (@Cus_Country IS NULL OR Cus_Country LIKE '%' + @Cus_Country + '%') AND (@Dept_ID IS NULL OR Dept_ID = @DeptID) AND (@Dept_ID_partial IS NULL OR CONVERT(varchar,Dept_ID) LIKE '%' + @Dept_ID_partial + '%')
您有几个处理数字的选项,这取决于您是否需要准确的语义或搜索语义.