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)
)