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

SQL declared variable as nvarchar. Use dec variable as 'like' or 'Contains' in where clause

我已经声明了我的变量:

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

然后我实际上想在我的 Where 子句中包含这个:

where  

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

显然行不通,因为这甚至没有查看我声明的变量。

但是你能看出我的意思吗?

谢谢!

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

where  

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

如果我猜测您正在使用 SQL 服务器(基于对 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 + '%'

您应该像这样更改查询。

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

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