我正在搜索表中字段中某个字符串的出现情况。搜索语句是通过动态 SQL 完成的,我的语句模板如下所示。
SET @sSQL = 'UPDATE #tempProcsAndJobs SET ' +
@columnName + ' = 1 WHERE createStatement LIKE ''%' +
@columnName + '%''';
EXECUTE (@sSQL);
上面的 SQL 产生类似于
UPDATE #tempProcsAndJobs SET LoadSummaryTotalSales = 1
WHERE createStatement LIKE '%LoadSummaryTotalSales%'
这种方法通常是有效的,直到遇到类似
UPDATE #tempProcsAndJobs SET Nightly SXe Data Transfers = 1
WHERE createStatement LIKE '%Nightly SXe Data Transfers%'
然后它抱怨语法错误。我尝试使用 CHARINDEX,但出现了同样的问题,服务器讨厌空格和破折号。我想知道是否有人知道如何解决这个问题。
任何帮助是极大的赞赏。
答案1
您需要用方括号括起您的列名,否则 SQL Server 会将空格和破折号解释为语句的一部分而不是列名。
SET @sSQL = 'UPDATE #tempProcsAndJobs SET [' +
@columnName + '] = 1 WHERE createStatement LIKE ''%' +
@columnName + '%''';
EXECUTE (@sSQL);
这将导致示例中出现以下语句:
UPDATE #tempProcsAndJobs SET [LoadSummaryTotalSales] = 1
WHERE createStatement LIKE '%LoadSummaryTotalSales%'
和
UPDATE #tempProcsAndJobs SET [Nightly SXe Data Transfers] = 1
WHERE createStatement LIKE '%Nightly SXe Data Transfers%'
这两个都是有效的 SQL。