基本上我有一个程序应该从表中获取查询并运行它们。这工作正常,除非我尝试在查询中引用的过程中定义变量。我只需使用:
定义变量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".
我一直在寻找,但我找不到解决这个问题的方法,或许有人知道如何解决这个问题?
谢谢,
萨姆
答案 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';