【问题标题】:SQL dynamic string filterSQL 动态字符串过滤器
【发布时间】:2018-10-10 10:12:45
【问题描述】:

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

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.

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

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    你的陈述中有太多的'。

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

    【讨论】:

    • 谢谢!这解决了它,我确实拥有比我应该拥有的更多的东西。
    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 2012-05-02
    • 1970-01-01
    • 2020-11-20
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多