1

我知道这可行,但有人知道在一行代码中完成所有这些的方法:

EXEC @ResultInt = NameofAStoredProcedure
IF @ResultInt <> 0
RETURN @ResultInt

喜欢:

-- I'm trying something like this but it does not work we want to do it all in
-- one line to do a Find-Replace throughout our code base
IF (EXEC @ResultInt = NameofAStoredProcedure) <> 0 RETURN ResultInt 
4

3 回答 3

2

也许我弄错了,但为什么不简单地删除空格呢?

EXEC @ResultInt = NameofAStoredProcedure IF @ResultInt <> 0 RETURN @ResultInt;

如果您只想将它​​放在一行中以便于编辑,那应该可以。您甚至可以包括以下声明@ResultInt

DECLARE @ResultInt int; EXEC @ResultInt = NameofAStoredProcedure IF @ResultInt <> 0 RETURN @ResultInt;

使用 MS SQL 2005 测试。

于 2013-05-09T18:56:56.987 回答
0

我建议不要尝试将所有内容压缩到一行以使大量查找和替换更容易,而是建议使用正则表达式来处理回车和换行,同时保持代码的可读性。例如,假设您想将“IF @ResultInt <> 0”更改为“IF @ResultInt <> 1”并添加行“SET @ResultInt = 1”,然后执行以下操作:

在查找和替换中启用正则表达式

在 Visual Studio 和 SQL Server Management Studio 中的查找和替换中,展开查找选项 -> 选择使用 -> 选择正则表达式。

查找什么声明

EXEC \@ResultInt = NameofAStoredProcedure\nIF \@ResultInt \<\> 0\nRETURN \@ResultInt

替换为声明

EXEC \@ResultInt = NameofAStoredProcedure\nIF \@ResultInt \<\> 1\nSET \@ResultInt = 1\nRETURN \@ResultInt

结果

EXEC @ResultInt = NameofAStoredProcedure
IF @ResultInt <> 1
SET @ResultInt = 1
RETURN @ResultInt
于 2013-05-09T19:09:17.940 回答
0

编辑。如前所述,这不起作用,但我会保留它以显示您不能做的事情:)

如果不将所有项目链接到一条丑陋的线上,我能想到的唯一方法是将调用包装在标量函数中。

但是,这不是您可以轻松重复使用的东西,并且如果您执行此分配,它将创建包装对象的分配。如果您只为一两个过程执行此操作,这是保持代码清洁的好方法,而且它只是在数据库中分配要管理的对象。

例子

CREATE FUNCTION dbo.SPWrapper() RETURNS int
AS
BEGIN
DECLARE @out int;
EXEC @out=NameOfStoredProcedure;
RETURN @out;
END
GO

-- Usage 
IF (SELECT dbo.SPWrapper() ) <> 0 
于 2013-05-09T18:47:18.480 回答