如何在SQL脚本中将@VAR和魔术数字传递给存储过程参数?

3
假设我有一个存储过程调用MyStoredProc,它接收一个整数参数(@MyParam INT)
假设我在脚本中声明了一个整数变量,如下所示...
DECLARE @MyVar INT ;
SET @MyVar = 101 ;

我刚刚写了一个很长的SQL脚本,其中有很多这样的操作...

EXEC MyStoredProc @MyVar + 1  ;

我很震惊这会导致语法错误警告。

我能做到这个...

EXEC MyStoredProc @MyVar ;

我可以做到这一点...

EXEC MyStoredProc 101 ;

但是我做不到这个...
EXEC MyStoredProc @MyVar + 1  ;

这将让我的脚本写起来更加困难,除非我漏掉了什么。这是针对 SQL 2005 的。


3
"EXEC MyStoredProc @MyVar + @MyVar2" 也无法工作。在这里投票支持此项 - Martin Smith
是的...我修正了这个问题。 - Seth Spearman
感谢提供点赞的链接...完成。 - Seth Spearman
2个回答

2

如果您将 @MyVar + @MyVar2 相加,可能会导致整数溢出,这可能是其中一个原因。

顺便说一下,在 SQL Server 2008 上以下内容不起作用。

EXEC MyStoredProc @MyVar + @MyVar2;

我认为在调用存储过程之前可以先进行加法计算(如 @adatishchev 所述),或者将两个参数传递给存储过程并在存储过程内部进行加法计算。

EXEC MyStoredProc @MyVar, @MyVar2;

CREATE PROCEDURE [dbo].[MyStoredProc]

     @MyVar INT,
     @MyVar2 INT
AS
BEGIN
     SELECT @MyVar += @MyVar2;

END

Kaf,我不确定为什么我认为我已经尝试过它并且它有效,但你是正确的(当我再次尝试时),你不能发送两个VARS到参数。我已编辑我的回答以反映这一点。 - Seth Spearman
...是的,你可以在之前进行加法操作,这正是我希望避免的。在我的非常长的参数化插入列表中,我希望避免使用SET语句破坏我的脚本美观性。可惜这是不可能的。但是我成功地将SET语句放在了每个语句的结尾,并且保持了大部分的美观性。感谢你的回答。 - Seth Spearman
在存储过程中创建第二个参数是一个不错的变通方法 - 肯定很容易实现,不需要太多的麻烦。 - whytheq

2

我所看到的唯一选项就是声明一个临时变量:

declare @var1_increment = @var1 + 1
exec stored_proc @var1_increment

创建连接和用户反馈主题,建议扩展 T-SQL 语法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接