我有一张包含数据的下表
--------------------
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
答案 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时,它将过滤查询变量值。