Sql 是否有一种方法可以执行SP,使用if语句检查结果并返回值,所有这些都在一行内?

Sql 是否有一种方法可以执行SP,使用if语句检查结果并返回值,所有这些都在一行内?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我知道这是可行的,但有人知道在一行代码中实现所有这些功能的方法吗: EXEC @ResultInt = NameofAStoredProcedure IF @ResultInt <> 0 RETURN @ResultInt 比如: 编辑。如前所述,这不起作用,但我将保留它,以显示您无法执行的操作: 如果不将所有项链接到一条丑陋的线上,我能想到的唯一方法就是将调用包装在标量函数中 但是,如果您执行此分配,那么它就不容易重用,并且将创建包装器对象的分配。这是保持代码整洁的好方法,如果您

我知道这是可行的,但有人知道在一行代码中实现所有这些功能的方法吗:

EXEC @ResultInt = NameofAStoredProcedure
IF @ResultInt <> 0
RETURN @ResultInt
比如:

编辑。如前所述,这不起作用,但我将保留它,以显示您无法执行的操作:

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

但是,如果您执行此分配,那么它就不容易重用,并且将创建包装器对象的分配。这是保持代码整洁的好方法,如果您只对一个或两个过程执行此操作,那么它只会分配要在数据库中管理的对象

范例

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

-- Usage 
IF (SELECT dbo.SPWrapper() ) <> 0 

也许我搞错了,但为什么不干脆删除空白呢

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

使用MS SQL 2005进行测试。

而不是试图将所有内容压缩到一行,以便更轻松地进行大规模查找和替换, 我建议使用来处理回车和换行,同时保持代码可读性。例如,假设您希望将IF@ResultInt 0更改为IF@ResultInt 1并添加行集@ResultInt=1,然后执行以下操作:

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

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

找到什么陈述

替换为语句

结果


... 不,你不应该这样做。为什么你只需要一行代码就可以做到这一点?空白在TSQL中并不重要,所以如果您愿意,可以将其全部放在一行中。为什么只需要在一行代码中执行此操作?Weel,更容易阅读,仅供初学者阅读。到目前为止,对SQL领域问题的第一个回答是为什么要这样做。我不知道问这个问题的人是否懂其他语言,我也会这么说。但是你更快了:这是一个好主意,但问题是我们公司有一些编码标准,我们几乎每行有一条语句,因为我们有不同的逻辑动态代码,等等,我得到批准偏离我们的编码标准一点,所以我用这个答案,简单的答案,简单的解决方案,我喜欢它。谢谢大家!好主意,尽管SQL Server允许我创建函数,但它不允许我执行调用存储过程的函数,因为它说:函数中只能执行函数和一些扩展存储过程..哈,好吧,我想我以前也做过,也得到了这个结果!我会更新答案,这样其他人会比我记得更清楚。没问题,我真的很喜欢这种方法。不知道为什么SQL Server只允许某些扩展存储过程使用这种方法!:-这是因为TSQL中的标量函数不应该具有修改数据的能力。因为SP可以做到这一点,所以查询优化器无法可靠地运行或诸如此类的操作。它可以在.NET CLR函数中工作,但除非您已经在服务器上处理CLR项目,否则这是不实际的。也可能完全超出了团队可接受的实践。
EXEC @ResultInt = NameofAStoredProcedure IF @ResultInt <> 0 RETURN @ResultInt;
DECLARE @ResultInt int; EXEC @ResultInt = NameofAStoredProcedure IF @ResultInt <> 0 RETURN @ResultInt;
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