选择Query中使用的临时变量

时间:2017-07-17 05:44:13

标签: sql sql-server tsql sql-like

我尝试使用临时变量从表中检索数据。 temp变量返回正确的数据但是当试图在Query中使用它时,它没有返回正确的数据集。 我已经尝试在查询中使用硬编码的临时值检索数据,它工作正常。谁能帮助我在这里找到问题。?

以下是我试过的代码

Declare @tempwordFinal varchar(50)                                     
select @tempwordFinal = ''''+'%'+'The Big Bang'+'%'+''''               
select @tempwordFinal --here the output is - '%The Big Bang%'

SELECT * from MasterProgram where ProgramTitle like @tempwordFinal --not working  
SELECT * from MasterProgram where ProgramTitle like '%The Big Bang%' -- working

2 个答案:

答案 0 :(得分:1)

因为xcopy "C:\Users\MyComputer\Desktop\Excel.xlsx" "C:\Users\MyComputer\Desktop\test location" 变量在开头和结尾都有单引号。因此,它希望@tempwordFinal列中的数据在开头和结尾都有单引号。除了通配符之外,变量中存在的任何内容都将被视为数据,这就是它失败的原因。

ProgramTitle

试试这种方式

select @tempwordFinal --here the output is - '%The Big Bang%'
                                             ^              ^

当您使用Declare @tempwordFinal varchar(50) select @tempwordFinal = '%The Big Bang%' select 1 where 'The Big Bang' like @tempwordFinal 数据类型的变量时,我们不需要单引号。只有在对字符串常量进行硬编码时才需要单引号

答案 1 :(得分:0)

问题出在你的(逃脱的)额外撇号上。像这样''''。除非您在数据库中查找明确包含撇号的单词,否则您不需要这些。更正后的代码如下所示:

Declare @tempwordFinal As Varchar(50);

Set @tempwordFinal = '%The Big Bang%';

Select @tempwordFinal;  -- %The Big Bang%

SELECT * from MasterProgram where ProgramTitle like @tempwordFinal;