处理 T-SQL 字符串函数中的破折号和空格

处理 T-SQL 字符串函数中的破折号和空格

我正在搜索表中字段中某个字符串的出现情况。搜索语句是通过动态 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。

相关内容