关于如何将 LIKE 运算符与参数一起使用,有几个选项。
OPTION 1
如果将 % 添加到参数值,则可以自定义 LIKE 过滤器的处理方式。例如,您的查询可能是:
SELECT name
FROM master.dbo.sysobjects
WHERE name LIKE @ReportParameter1
为了使数据集正确使用 LIKE 语句,您可以使用像 sysa% 这样的参数值。当我使用此代码在 SSRS 2008 中测试示例报告时,我返回了以下四个表:
sysallocunits
sysaudacts
sysasymkeys
sysaltfiles
OPTION 2
另一种不需要用户添加任何“%”符号的方法是生成一个包含代码的变量并执行该变量。
DECLARE @DynamicSQL NVARCHAR(MAX)
SET @DynamicSQL =
'SELECT name, id, xtype
FROM dbo.sysobjects
WHERE name LIKE ''' + @ReportParameter1 + '%''
'
EXEC (@DynamicSQL)
这将使您更好地控制如何使用 LIKE 语句。如果您不希望用户注入任何其他运算符,那么您始终可以添加代码来删除非字母数字字符,然后再将其合并到最终查询中。
OPTION 3
您可以创建一个控制此功能的存储过程。我通常更喜欢使用存储过程作为 SSRS 的数据源,并且从不允许动态生成 SQL,但这只是我的偏好。这有助于在执行依赖性分析检查时提高可发现性,并且还允许您确保最佳的查询性能。
OPTION 4
创建有助于动态生成 SQL 代码的 .NET 代码程序集。我认为这太过分了,充其量也是一个糟糕的选择,但它可以想象得到。