Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 临时表问题并合并两个存储过程的结果_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server 临时表问题并合并两个存储过程的结果

Sql server 临时表问题并合并两个存储过程的结果,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,目标 我有两个存储过程,我正在尝试将它们的结果合并到一个结果集中(我觉得现在是一个很好的时机来说明它们不能在任何列上合并) 我一直在四处寻找,解决方案似乎是使用临时表。然而,虽然我可以很好地创建这个过程,但当我调用它时,我得到一个错误,即临时表无效 我知道本地和全局临时表和会话。但是,如果调用创建表/会话的存储过程,我不确定为什么会出现此错误 感谢帮助解决问题 存储过程: ALTER PROCEDURE usp_returnReadBook @DateStart DATETIME = N

目标

我有两个存储过程,我正在尝试将它们的结果合并到一个结果集中(我觉得现在是一个很好的时机来说明它们不能在任何列上合并)

我一直在四处寻找,解决方案似乎是使用临时表。然而,虽然我可以很好地创建这个过程,但当我调用它时,我得到一个错误,即临时表无效

我知道本地和全局临时表和会话。但是,如果调用创建表/会话的存储过程,我不确定为什么会出现此错误

感谢帮助解决问题

存储过程:

ALTER PROCEDURE usp_returnReadBook
    @DateStart DATETIME = NULL,
    @DateEnd DATETIME = NULL
AS
    INSERT INTO #tempRead
        EXECUTE [dbo].[usp_line] @DateStart,@DateEnd   

    INSERT INTO #tempRead
        EXECUTE [dbo].[usp_line2] @DateStart,@DateEnd

    SELECT * FROM #tempRead
EXEC [dbo].usp_returnReadBook @DateStart = N'2020/08/01',@DateEnd = N'2020/12/01'
调用过程:

ALTER PROCEDURE usp_returnReadBook
    @DateStart DATETIME = NULL,
    @DateEnd DATETIME = NULL
AS
    INSERT INTO #tempRead
        EXECUTE [dbo].[usp_line] @DateStart,@DateEnd   

    INSERT INTO #tempRead
        EXECUTE [dbo].[usp_line2] @DateStart,@DateEnd

    SELECT * FROM #tempRead
EXEC [dbo].usp_returnReadBook @DateStart = N'2020/08/01',@DateEnd = N'2020/12/01'
如果我能得到一些帮助,让我的存储过程返回两个存储过程的组合结果,我将不胜感激

关于

您需要定义#临时表:

ALTER PROC usp_returnReadBook
   @DateStart DATETIME = NULL,
   @DateEnd DATETIME = NULL
AS
BEGIN
  CREATE TABLE #tempRead(col1 type1, col2 type2); 

  INSERT INTO #tempRead(col1, col2) EXECUTE [dbo].[usp_line]  @DateStart,@DateEnd;  
  INSERT INTO #tempRead(col1, col2) EXECUTE [dbo].[usp_line2] @DateStart,@DateEnd;
  SELECT * FROM #tempRead;
END
表定义必须与存储过程输出匹配。

您需要定义#temp table:

ALTER PROC usp_returnReadBook
   @DateStart DATETIME = NULL,
   @DateEnd DATETIME = NULL
AS
BEGIN
  CREATE TABLE #tempRead(col1 type1, col2 type2); 

  INSERT INTO #tempRead(col1, col2) EXECUTE [dbo].[usp_line]  @DateStart,@DateEnd;  
  INSERT INTO #tempRead(col1, col2) EXECUTE [dbo].[usp_line2] @DateStart,@DateEnd;
  SELECT * FROM #tempRead;
END

表定义必须与存储过程输出匹配。

延迟名称解析将允许创建过程。该表必须在运行时存在-它不存在,并且会导致运行时执行错误(为了将来的参考,请始终发布准确完整的错误消息)。考虑到涉及的名称,这似乎是一个延迟的名称解析,它将允许创建过程。该表必须在运行时存在-它不存在,并且会导致运行时执行错误(为了将来的参考,请始终发布准确完整的错误消息)。考虑到涉及的名称,这似乎是一个