Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 为什么%通配符在SQL Server中不能作为变量的内容使用?_Sql Server_Wildcard - Fatal编程技术网

Sql server 为什么%通配符在SQL Server中不能作为变量的内容使用?

Sql server 为什么%通配符在SQL Server中不能作为变量的内容使用?,sql-server,wildcard,Sql Server,Wildcard,我对在变量中使用%通配符感到困惑 对于以下情况,这将起作用: SELECT * FROM TABLE WHERE column LIKE 'blah%' 但这不会: DECLARE @myvar AS varchar = 'blah%' SELECT * FROM TABLE WHERE column LIKE @myvar 我错过了什么 谢谢 通过将通配符声明为变量,它就变成了另一个文本。此外,应该为VARCHAR指定一个长度。那么这就行了 DECLARE @myvar varc

我对在变量中使用
%
通配符感到困惑

对于以下情况,这将起作用:

SELECT * 
FROM TABLE 
WHERE column LIKE 'blah%'
但这不会:

DECLARE @myvar AS varchar = 'blah%'

SELECT * 
FROM TABLE 
WHERE column LIKE @myvar
我错过了什么


谢谢

通过将通配符声明为变量,它就变成了另一个文本。此外,应该为VARCHAR指定一个长度。那么这就行了

DECLARE @myvar varchar(10) = 'blah'
SELECT * FROM TABLE WHERE column like @myvar+'%'
请参见此工作示例

drop table if exists #Stock;
go
create table #Stock(
  some_col      varchar(10) not null);

insert #Stock(some_col) values ('Stock abc'),('Stock abc'),('Stock abc');

DECLARE @myvar varchar = 'Stock%';
SELECT * FROM #Stock WHERE some_col like @myvar;

DECLARE @myvar2 varchar = 'Stock';
SELECT * FROM #Stock WHERE some_col like @myvar2+'%';

这——只要你不犯错误。
将@myvar声明为varchar='blah%'
=
将@myvar声明为varchar(1)='blah%'
=
将@myvar声明为varchar(1)='b'
,它不包含通配符。这是可行的,但将
@myvar
声明为
vachar(20)
,而不是
varchar
。(相当于
varchar(1)