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

How to use wildcard symbol in SQL query that is assigned as parameter value using SET?

以下查询中缺少什么?

出现错误

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

我的代码:

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

使用参数和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 + ' %'

你的@SQL声明应该如下。

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

但是,您应该考虑不要对整个语句执行动态 SQL。您可以只构造 @GroupName 参数。

另外,研究理解 SQL Injection Attacks,您可能会完全重新考虑这种方法。