通过位于表中的Query使用变量

时间:2013-08-05 16:47:48

标签: sql sql-server

基本上我有一个程序应该从表中获取查询并运行它们。这工作正常,除非我尝试在查询中引用的过程中定义变量。我只需使用:

定义变量
DECLARE @spcode as varchar(255)
SET @spcode = 'C'

然后在表格中我引用它:

...
where sp_flag = @spcode
...

我的程序然后遍历表并执行表中的所有查询,如果我只是设置sp_flag ='C',这是有效的,但如果我尝试将其设置为过程中定义的变量,我得到以下错误:

Msg 137, Level 15, State 2, Line 7
Must declare the scalar variable "@spcode".

我一直在寻找,但我找不到解决这个问题的方法,或许有人知道如何解决这个问题?

谢谢,

萨姆

1 个答案:

答案 0 :(得分:2)

看看这个例子。

第一个片段在不使用变量的情况下执行SQL语句。第二个。

create table tbl1 (id int identity(1,1), value varchar(100));  
insert into tbl1 (value) values ('abc'), ('def'), ('xyz');

-- first snippet (without using variable)
declare
    @sql varchar(max);

set @sql = 'select * from tbl1 where value = ''abc''';

exec(@sql);



-- second snippet (with variable)
declare
    @sql nvarchar(max),
    @param nvarchar(100);

set @param = N'@val varchar(100)'
set @sql = N'select * from tbl1 where value = @val';

exec sp_executesql @sql, @param, @val = 'abc';