函数在SQL Server中返回结果集和整数

问题描述 投票:0回答:1

我正面临着一个由SQL Server强制执行的非常烦人的障碍,并希望检查是否有一个优雅的解决方案。

我有一系列程序的调用(意思是,A调用B调用C)。这些过程是由于返回不同的结果集,其中(例如)“A”使用“B”返回的一组记录生成其结果。

现在,SQL Server不允许嵌套INSERT INTO ... EXEC <stored procedure>,为了应对这个限制,我将最低的过程转换为一个函数,返回一个表,因此返回INSERT INTO ... SELECT * FROM <function call>

现在,在某些情况下,由于数据的条件,FUNCTION无法返回结果,我希望函数返回一种表示执行结果的代码(例如0意味着成功,1意味着“缺失”输入数据”)。

由于SQL Server不允许使用OUTPUT参数的函数,我想不出任何传达这两个输出的优雅方式。

谁能提出一个优雅的选择?

sql-server stored-procedures stored-functions
1个回答
1
投票

在某些情况下,由于数据的条件,FUNCTION无法返回结果,我希望函数返回一种表示执行结果的代码

你真的应该用THROW来表示执行结果,这也排除了使用表值函数。

所以你需要使用存储过程。为了避免对嵌套INSERT .. SELECT的限制,您可以使用临时表将数据传递回调用过程。例如

create or alter procedure foo
as
begin
  if object_id('tempdb..#foo_results') is null
  begin
     print 'create table #foo_results(id int primary key, a int);';
     THROW 51000, 'The results table #foo_results does not exist.  Before calling this procedure create it. ', 1;  
  end

  insert into #foo_results(id,a)
  values (1,1);


end;

任何人都可以建议一个ELEGANT替代品吗?

我不确定任何替代品是否优雅。

© www.soinside.com 2019 - 2024. All rights reserved.