SQL将变量声明为nvarchar。在where子句中使用dec变量为'like'或'Contains'

时间:2017-09-19 12:27:52

标签: sql variables where sql-like contain

我已声明我的变量:

declare @search as nvarchar
set @search = 'road'

然后我有效地希望在我的Where子句中有这个:

where  

unit.BuildingName like '%@search%' or
property.Street like '%@search%' or
unit.Street like '%@search%'

显然不会起作用,因为这甚至都没有查看我声明的变量。

但你能看到我想要的东西吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

您应该像这样更改查询。

declare @search as nvarchar(500)
set @search = '%road%'

where  
unit.BuildingName like @search or
property.Street like @search or
unit.Street like @search

答案 1 :(得分:0)

查询中的

@search按字面解释,而不是作为变量值。你可能想要这个:

where  

unit.BuildingName like '%' + @search + '%' or
property.Street like '%' + @search + '%' or
unit.Street like '%' + @search + '%'

答案 2 :(得分:0)

如果我猜你正在使用SQL Server(基于对contains的引用),你需要做两件事:

declare @search as nvarchar(255)
set @search = 'road';

请注意添加长度。

然后:

where unit.BuildingName like '%' + @search + '%' or
      property.Street like '%' + @search + '%' or
      unit.Street like '%' + @search + '%'

如果这是动态SQL的一部分,您应该将@search作为字符串传递,而不是更改查询字符串。

您可以将逻辑简化为:

where (unit.BuildingName + property.Street + unit.Street) like '%' + @search + '%'