Sql中的局部变量选择查询

时间:2014-08-27 10:14:47

标签: sql

我有一张包含数据的下表

--------------------
Name    |   Status
--------|-----------     
AAA     |    Active
BBB     |    Active
CCC     |    Active

我试图通过使用局部变量来获取选择查询,但查询不起作用,我没有得到任何结果。

declare
   @v1 nvarchar(100)=null,
   @v2 nvarchar(100)=null

set @v1='AAA'
set @v2 =' and Name=' + '''' + @v1 + ''''

SELECT * 
FROM Employe  
WHERE status = 'Active'  + @v2 

3 个答案:

答案 0 :(得分:0)

由于您将从变量动态创建Where子句,因此需要将Query准备为字符串,然后使用exec命令执行。

这是因为您需要准备动态SQL查询

declare
@v1 nvarchar(100)=null,   
@v2 nvarchar(100)=null,
@SQL nvarchar(4000) = null 

set @v1='AAA'
set @v2 =' and Name=' + '''' + @v1 + ''''

SET @SQL = 'SELECT * FROM  Employe  WHERE  status = ''Active'''  + @v2

EXEC @SQL

答案 1 :(得分:0)

您不需要@v2

declare
@v1 nvarchar(100)=null

set @v1='AAA'

SELECT * FROM  Employe  WHERE  status = 'Active' and Name = @v1

答案 2 :(得分:0)

动态SQL查询的替代方法是在where子句中有条件地使用变量,如下面的

declare @v1 nvarchar(100)=null,    
set @v1='AAA'
SELECT * FROM  Employe  WHERE  status = 'Active'  AND (@v1 IS NULL OR Name = @v1) 

如果变量为NULL,上面的代码将返回所有记录而不管名称。当变量不为NULL时,它将过滤查询变量值。