我正在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。