Sql 通过位于表中的查询使用变量

Sql 通过位于表中的查询使用变量,sql,sql-server,Sql,Sql Server,基本上,我有一个过程,应该从表中获取查询并运行它们。除非我试图在查询中引用的过程中定义一个变量,否则这一切都很好。我只是使用以下方法定义变量: DECLARE @spcode as varchar(255) SET @spcode = 'C' 然后在表中我在这里引用它: ... where sp_flag = @spcode ... 然后,我的过程在表中运行并执行表中的所有查询,如果我简单地将sp_flag设置为'C',这会起作用,但如果我尝试将其设置为过程中定义的变量,则会出现以下错误:

基本上,我有一个过程,应该从表中获取查询并运行它们。除非我试图在查询中引用的过程中定义一个变量,否则这一切都很好。我只是使用以下方法定义变量:

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".
我四处寻找,但我没有找到这个问题的解决方案,也许有人知道我将如何着手解决这个问题

谢谢

山姆看看这个例子

第一个代码段不使用变量执行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';

sp_executesql:您是说我应该使用sp_executesql来代替EXECUTE?如何执行表中的查询?您是否尝试过
SET@sql=replace(@sql,@spcode,''C')