如何在使用SET分配为参数值的SQL查询中使用通配符?

时间:2018-07-30 23:44:11

标签: sql sql-server wildcard

以下查询中缺少什么?

出现错误

  

数据类型varchar和varchar在模运算符中不兼容

我的代码:

DECLARE @SQLStatement AS VARCHAR(max)
DECLARE @GroupName VARCHAR(100) = 'abc xyz abc'

CREATE TABLE #a 
(
    col1 INT, 
    col2 VARCHAR(50), 
    col3 VARCHAR(100)
)

SET @SQLStatement = 'INSERT INTO #a
                        SELECT col1, col2, col3
                        FROM Group
                        WHERE GroupName like '+@GroupName+''%''' '

PRINT (@SQLStatement)
EXEC (@SQLStatement)

SELECT * FROM #a

2 个答案:

答案 0 :(得分:2)

使用参数和sp_executesql

SET @SQLStatement = '
                        INSERT INTO #a
                        SELECT col1, col2, col3
                        FROM Group
                        WHERE GroupName like @GroupName + ''%''
                    ';

exec sp_executesql @SQLStatement, N'@GroupName varchar(100)', @GroupName = @GroupName;

这似乎无济于事,想必您打算这样做:

WHERE ' ' + GroupName + ' ' LIKE '% ' + @GroupName + ' %'

答案 1 :(得分:1)

您的@SQLStatement应该如下所示。

SET @SQLStatement = 'INSERT INTO #a SELECT col1, col2, col3 FROM Group WHERE GroupName LIKE '''+@GroupName+'%''';

但是,您应该考虑不在整个语句中为此使用动态SQL。您只需构建@GroupName参数就可以逃脱。

此外,请了解一下SQL Injection Attacks,您可能会完全重新考虑这种方法。