处理T-SQL String函数中的破折号和空格

我正在search一个表中字段的string的发生。 search语句是通过dynamicSQL与我的语句模板看起来像这样。

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,并出现同样的问题,服务器恨空格和破折号。 我想知道如果有人知道如何解决这个问题。

任何帮助是极大的赞赏。

您需要用方括号封装列名,否则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。