过程参数中的字符串连接

时间:2013-03-11 16:12:43

标签: sql sql-server sql-server-2008 tsql

我想做这样的事情:

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

但是我收到了错误:

Incorrect syntax near '+'.

当然我可以在exec程序之前设置变量:

set @var = 'sec ' + @var;

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

3 个答案:

答案 0 :(得分:12)

您需要修改代码,抱歉。没有任何魔法会使这个合法化:

EXEC dbo.procedure_name @var + 'constant';

另外,STOP using the sp_ prefix for stored procedures

答案 1 :(得分:11)

如果你使用EXEC,我认为在程序执行中不可能使用字符串连接。

来自this

  

执行存储过程或函数

     

[{EXEC | EXECUTE}]

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

@parameter必须是。 但是:'sec ' + @var expression

答案 2 :(得分: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