Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql server中使用LIKE通配符的查询_Sql_Sql Server - Fatal编程技术网

在sql server中使用LIKE通配符的查询

在sql server中使用LIKE通配符的查询,sql,sql-server,Sql,Sql Server,我想在我的ASP.NET web项目中执行一个小型SQL server搜索,我的数据库不大,所以我认为最好不要使用全文搜索 我想执行如下简单搜索: select * from mytable where columnA LIKE '%something%' 我可以通过以下方式使用=: select * from mytable where columnA='"+myVariable+"' 但我如何使用变量来代替类似短语中的%something%? 对吗?比如“+%myVariable%+”

我想在我的ASP.NET web项目中执行一个小型SQL server搜索,我的数据库不大,所以我认为最好不要使用全文搜索 我想执行如下简单搜索:

select * from mytable where columnA LIKE '%something%'
我可以通过以下方式使用=:

select * from mytable where columnA='"+myVariable+"'
但我如何使用变量来代替类似短语中的%something%? 对吗?比如“+%myVariable%+”

我使用VS2010,C


谢谢

你可以做如下事情:

var query = "SELECT * FROM MyTable WHERE columnA LIKE '%" + myVariable + "%'";
使用:


我刚刚尝试了这个,发现您可以执行以下操作:

SELECT * FROM whatever WHERE column LIKE '%'+@var+'%'
请尝试以下查询:

select * from tablename where colname like '%' + @varname + '%'

希望能有所帮助。

以防其他人像我一样无意中看到这篇文章。在带有SQL 2012 Server后端的SSMS 2012上,我能够按如下方式使用代码,没有任何问题

DECLARE @myVariable varchar(MAX)
SET @myVariable = 'WhatYouAreLookingFor'
SELECT * FROM mytable 
  WHERE columnA LIKE '%' + @myVariable + '%'
Declare @MyVariable

Set @MyVariable = '%DesiredString%'

Select *

From Table_A

Where Field_A like @MyVariable
然后,每次您想要更改所需的字符串时,只需在Set语句中更改它


我知道这篇文章是在2012年之前发表的,这就是为什么我要提到这篇文章,以防有更新设置的人查看这篇文章。

如果您担心sql注入,请尝试类似的方法。它更复杂,但它可以工作,并且应该满足安全性要求。假设有人使用名为@searchstring的参数将值传递到存储过程中

DECLARE @searchString nvarchar(100) = 'test',
    @SQL nvarchar(max),
    @foundSearchHit bit,
    @paramdef nvarchar(max) = '@foundSearchHit bit OUTPUT'

SET @searchstring = '%' + @searchString + '%'

SET @SQL = '
SELECT TOP 1 @foundSearchHit = 1
FROM sys.databases WHERE [name] like ' + 
    QUOTENAME(@searchString,'''') 
EXEC sp_executeSQL @SQL, @paramdef, @foundSearchHit = @foundSearchHit OUTPUT

SELECT @foundSearchHit

这应该可以解决问题。

正确,但也很糟糕。连接字符串以生成SQL语句会使您对SQL注入敞开大门。假设myVariable有值';删除表mytable;?查看参数化查询或Linq变体中与DB@spender:无论如何,应在执行查询之前进行安全验证,因此这不是查询问题itself@sll我不相信。很难对将混合到SQL语句中的字符串进行安全验证。亲爱的朋友们,感谢你们的快速回答,我找到了正确的答案。为什么用不同的括号?我想你们在谈论单引号和双引号。我用它作为问题中给出的查询的一个例子,如下所示:从mytable中选择*,其中columnA='+myVariable+'。因此,在这个查询中,如果您想使用LIKE,那么在单引号后面添加%并以类似方式关闭它。
Declare @MyVariable

Set @MyVariable = '%DesiredString%'

Select *

From Table_A

Where Field_A like @MyVariable
DECLARE @searchString nvarchar(100) = 'test',
    @SQL nvarchar(max),
    @foundSearchHit bit,
    @paramdef nvarchar(max) = '@foundSearchHit bit OUTPUT'

SET @searchstring = '%' + @searchString + '%'

SET @SQL = '
SELECT TOP 1 @foundSearchHit = 1
FROM sys.databases WHERE [name] like ' + 
    QUOTENAME(@searchString,'''') 
EXEC sp_executeSQL @SQL, @paramdef, @foundSearchHit = @foundSearchHit OUTPUT

SELECT @foundSearchHit