【问题标题】:More than Like Statement in a variable多于变量中的 Like 语句
【发布时间】:2016-06-12 14:01:04
【问题描述】:

为什么会这样:

SELECT * FROM Companies  WHERE CompanyCode LIKE '%' AND BusinessUnitShortName LIKE 'CO%'

虽然这意味着这不起作用:

DECLARE @WHERECondition NVARCHAR(200) = ''
SET @WHERECondition = '''%'' AND BusinessUnitShortName LIKE ''CO%'''

SELECT * FROM Companies WHERE CompanyCode LIKE  @WHERECondition
SELECT  @WHERECondition

【问题讨论】:

  • 因为除非您使用动态 SQL,否则列名不能包含在变量中。

标签: sql sql-server sql-server-2008 dml


【解决方案1】:

要完成这项工作,您需要使用动态 sql 之类的

DECLARE @WHERECondition NVARCHAR(200) = ''
SET @WHERECondition = '''%'' AND BusinessUnitShortName LIKE ''CO%'''
declare @sql nvarchar(Max)

Set @sql='SELECT * FROM Companies WHERE CompanyCode LIKE'+@WHERECondition

exec sp_executesql @sql

如果您不使用动态 sql,则需要提供列名,因为 SQL 解析器会在解析查询时查找列,如果未找到将导致错误。

【讨论】:

    【解决方案2】:

    您需要使用动态 SQL 来实现您想要的。您当前的方法被评估为这样的:

    SELECT * 
    FROM Companies 
    WHERE CompanyCode LIKE '''%'' AND BusinessUnitShortName LIKE ''CO%'''
    

    你真正想要的更像是这样的:

    DECLARE @sql NVARCHAR(MAX) = ''
    DECLARE @WHERECondition =  '''%'' AND BusinessUnitShortName LIKE ''CO%'''
    
    SET @sql = 'SELECT * FROM Companies WHERE CompanyCode LIKE ' + @WHERECondition
    EXEC(@sql);
    

    这将评估为:

    SELECT * FROM Companies WHERE CompanyCode LIKE '%' AND BusinessUnitShortName LIKE 'CO%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 2016-06-05
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      相关资源
      最近更新 更多