SQL动态字符串过滤器

时间:2018-10-10 10:12:45

标签: sql sql-server

我试图让用户选择他们想从表中查看哪些列,即使他们没有填写某人的全名(例如过滤器),也能够获得结果。当下面的代码不在SET字符串中时,它可以正常工作,但在正常情况下,我确实有一个看不见的错误。该错误在“ WHERE”行中,这正是SQL Server告诉我的。

DECLARE @SQL NVARCHAR(Max) = ''
SET @SQL = 
'
    SELECT ' + @TableList + ' FROM People
    WHERE (IsNull(Input.Name, '''')  LIKE ''%''  '+ @Name +'  ''%'')
'
EXEC(@SQL)

下面是当查询不在字符串中并且可以正常工作时的样子。

    SELECT [Name], [Age], [City] FROM People
    WHERE (IsNull(Input.Name, '')  LIKE '%' + @Name + '%')

假设用户输入名称“ Tom”,他们将获得以下结果...

Name     Age      City
Tom      28        NY
Tommy    35        LA

我收到的错误消息是...

The data types varchar and varchar are incompatible in the modulo operator.

这确实让我感到困惑,因为当它不在字符串中时,它可以正常工作。

1 个答案:

答案 0 :(得分:4)

您的对帐单中有太多'。

DECLARE @SQL NVARCHAR(Max) = ''
SET @SQL = 
'
    SELECT ' + @TableList + ' FROM People
    WHERE (IsNull(Input.Name, '''')  LIKE ''%'+ @Name +'%'')
'
EXEC(@SQL)