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')
?