2016-02-29 138 views
2

爲什麼這個工作:比LIKE語句更可變

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 
+1

因爲除非您使用動態SQL,否則列名不能包含在變量中。 – xQbert

回答

1

,使這項工作你需要使用動態SQL,如

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

Set @sql='SELECT * FROM Companies WHERE CompanyCode LIKE'[email protected] 

exec sp_executesql @sql 

如果您不使用動態SQL,那麼您需要提供列名,因爲SQL解析器在解析查詢時將查找列,如果找不到則會導致錯誤。

+1

非常感謝你 – user2773107

0

你需要使用動態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); 

這將evalute到:

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

非常感謝你 – user2773107