3

我想做这样的事情:

declare @var varchar(50) = '2';
exec sp_myprocedure 'first', 'sec ' + @var

但我收到一个错误:

Incorrect syntax near '+'.

当然我可以在执行过程之前设置变量:

set @var = 'sec ' + @var;

但我不想要这个,因为我的代码中有很多执行,我不想创建数百万个变量。

4

3 回答 3

12

您需要修复您的代码,抱歉。没有魔法可以使这合法化:

EXEC dbo.procedure_name @var + 'constant';

此外,停止使用sp_存储过程的前缀

于 2013-03-11T17:03:43.483 回答
11

我认为如果您使用EXEC.

从此:_

执行存储过程或函数

[ { 执行 | 执行 } ]

{ 
  [ @return_status = ]
  { module_name [ ;number ] | @module_name_var } 
    [ [ @parameter = ] { value 
                       | @variable [ OUTPUT ] 
                       | [ DEFAULT ] 
                       }
    ]
  [ ,...n ]
  [ WITH <execute_option> [ ,...n ] ]
} [;]

@parameter必须是一个。但是 this:'sec ' + @var是一个表达式

于 2013-03-11T16:22:53.733 回答
9

你不需要声明一百万个变量,你只需要声明一个变量,并在每个变量之前设置它EXEC

DECLARE @cmd nvarchar(max) = '';

declare @var varchar(50) = '2';

set @cmd = 'sec ' + @var;
exec sp_myprocedure 'first', @cmd

set @cmd = 'try ' + @var;
exec sp_myprocedure 'first', @cmd

set @cmd = 'foo ' + @var;
exec sp_myprocedure 'first', @cmd

set @cmd = 'bar ' + @var;
exec sp_myprocedure 'first', @cmd
于 2013-03-11T17:27:42.183 回答