我试图在存储过程中使用动态SQL语句来根据用户的输入过滤查询。我只使用一个需要在数据库中找到匹配的forenames的参数开始基本。
CREATE PROCEDURE dbo.uspFilter
@FirstName varchar(100) = null,
@Debug bit = 1
AS
DECLARE @SQL nvarchar(max);
DECLARE @Params nvarchar(max);
DECLARE @Search nvarchar(300);
SELECT @Params = N'@FirstName varchar(300) = null'
SELECT @SQL = N'SELECT * FROM Table WHERE 1=1'
IF @FirstName IS NOT NULL
SELECT @Search = N'@FirstName' + N'%'''
SELECT @SQL = @SQL + N' AND Forename LIKE ''' + @Search
IF @Debug = 1
@PRINT @SQL
EXEC sp_executeSQL @SQL, @Params, @FirstName = @FirstName;
GO
EXEC dbo.uspFilter @FirstName = 'Test', @Debug = 1;
GO
debug语句的输出看起来正确,但它没有返回任何结果:
SELECT * FROM Table WHERE 1=1 AND Forename LIKE '@FirstName%'
编辑:这是我正在寻找的精简版 - 我将使用不同搜索条件的多个参数。
答案 0 :(得分:1)
您需要这样做:
driver.find_elements_by_xpath("//table/tr/td[2]")
请注意,尽管Crowcoder对SQL注入的评论很重要,但您可以编写不允许注入的动态SQL。如上。
编辑:一些轻微的修正。
答案 1 :(得分:0)
您也可以在不进行动态查询的情况下应用动态where条件,请看下面的示例示例。您可以通过以下示例应用AND where子句来加入其他过滤器。
Declare @firstName VARCHAR(50)='sa'
SELECT
*
FROM Table
WHERE
(
(Forename LIKE '%'+@firstName+'%' AND @firstName!='')
OR
(@firstName='')
)