Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Sql Server_Database_Sql Server 2008_Sql Server 2017 - Fatal编程技术网

在SQL Server中将一个存储过程调用为另一个存储过程。是否获取错误?

在SQL Server中将一个存储过程调用为另一个存储过程。是否获取错误?,sql,sql-server,database,sql-server-2008,sql-server-2017,Sql,Sql Server,Database,Sql Server 2008,Sql Server 2017,我想通过将相同的参数D1和DIV传递给两个过程,从第一个过程SP_报告调用第二个过程SP_集合 R_SP_报告:第一个程序 CREATE PROC R_SP_REPORT @D1 DATETIME, @DIV VARCHAR(10) AS BEGIN SELECT A.TRNDATE, A.DIVISION, A.USER, ... etc... FROM REPORT A INNER JOIN

我想通过将相同的参数D1和DIV传递给两个过程,从第一个过程SP_报告调用第二个过程SP_集合

R_SP_报告:第一个程序

CREATE PROC R_SP_REPORT
    @D1 DATETIME,
    @DIV VARCHAR(10)
AS 
BEGIN
    SELECT 
        A.TRNDATE, A.DIVISION, A.USER,
        ... etc...
    FROM 
        REPORT A 
    INNER JOIN 
        REPORT_MAIN B ON A.ID = B.ID 
                      AND A.DIVISION = B.DIV  
    WHERE 
        LEFT(A.ID, 2) IN ('SI')  
        AND a.TRNDATE = @d1 
        AND a.DIVISION = @div
    GROUP BY 
        TRNDATE, DIVISION, USER
    
    --I want to call here R_SP_COLLECTION stored procedure 
    BEGIN 
        EXEC R_SP_COLLECTION @d1 = @d1, @div = @div  // Do something here.. I am not gatting data from 
         //second stored procedure.. 
    END
END
 CREATE PROCEDURE R_SP_COLLECTION
     @D1 DATETIME,
     @DIV VARCHAR(10)
 AS 
 BEGIN
     SELECT 
         PostDateTime, DIVISION, NAME 
     FROM 
         SalesEntry 
     WHERE 
         PostDateTime = @d1 
         AND DIVISION = @div
 END
R_SP_收集:第二个过程

CREATE PROC R_SP_REPORT
    @D1 DATETIME,
    @DIV VARCHAR(10)
AS 
BEGIN
    SELECT 
        A.TRNDATE, A.DIVISION, A.USER,
        ... etc...
    FROM 
        REPORT A 
    INNER JOIN 
        REPORT_MAIN B ON A.ID = B.ID 
                      AND A.DIVISION = B.DIV  
    WHERE 
        LEFT(A.ID, 2) IN ('SI')  
        AND a.TRNDATE = @d1 
        AND a.DIVISION = @div
    GROUP BY 
        TRNDATE, DIVISION, USER
    
    --I want to call here R_SP_COLLECTION stored procedure 
    BEGIN 
        EXEC R_SP_COLLECTION @d1 = @d1, @div = @div  // Do something here.. I am not gatting data from 
         //second stored procedure.. 
    END
END
 CREATE PROCEDURE R_SP_COLLECTION
     @D1 DATETIME,
     @DIV VARCHAR(10)
 AS 
 BEGIN
     SELECT 
         PostDateTime, DIVISION, NAME 
     FROM 
         SalesEntry 
     WHERE 
         PostDateTime = @d1 
         AND DIVISION = @div
 END
我正在传递第一个过程R_SP_报告中的@D1和@Div参数,我想将它们分别发送到R_SP_集合的PostDateTime和Division

那我该怎么做呢?需要帮助吗

更新:发生此错误后,我尝试转换datetime,如查询中所示,但仍然收到相同的错误:

 CREATE PROC R_SP_COLLECTION
     @D1 DATETIME,
     @DIV VARCHAR(10)
 AS 
 BEGIN
     SELECT 
         CONVERT(DATETIME, PostDateTime, 105) AS TDATE,
         DIVISION, NAME 
     FROM 
         SalesEntry 
     WHERE 
         PostDateTime = @d1 AND DIVISION = @div
 END
执行第一个过程时出错

CREATE PROC R_SP_REPORT
    @D1 DATETIME,
    @DIV VARCHAR(10)
AS 
BEGIN
    SELECT 
        A.TRNDATE, A.DIVISION, A.USER,
        ... etc...
    FROM 
        REPORT A 
    INNER JOIN 
        REPORT_MAIN B ON A.ID = B.ID 
                      AND A.DIVISION = B.DIV  
    WHERE 
        LEFT(A.ID, 2) IN ('SI')  
        AND a.TRNDATE = @d1 
        AND a.DIVISION = @div
    GROUP BY 
        TRNDATE, DIVISION, USER
    
    --I want to call here R_SP_COLLECTION stored procedure 
    BEGIN 
        EXEC R_SP_COLLECTION @d1 = @d1, @div = @div  // Do something here.. I am not gatting data from 
         //second stored procedure.. 
    END
END
 CREATE PROCEDURE R_SP_COLLECTION
     @D1 DATETIME,
     @DIV VARCHAR(10)
 AS 
 BEGIN
     SELECT 
         PostDateTime, DIVISION, NAME 
     FROM 
         SalesEntry 
     WHERE 
         PostDateTime = @d1 
         AND DIVISION = @div
 END
警告:通过聚合或其他集合操作消除空值

Msg 8114,16级,状态5,程序R_SP_采集,第0行 将数据类型nvarchar转换为datetime时出错

对于sql server,请尝试:
EXEC R_SP_COLLECTION@D1、@DIV

SP_前缀由Microsoft保留,不应用于用户过程。这样做会带来性能成本和程序在更新后一天无法运行的风险。另外,为什么要标记SQL Server 2008和2017?这两个版本有很大的不同,因为两个版本之间有9年的时间间隔,而前者在去年就结束了。对于伪SQL来说,它看起来不错,这表明我们可能遗漏了一些东西。然而,另一个注意事项是,报表中没有一个a,所以为什么要将其别名为a?正如@Larnu所说,它看起来不错。我做了一个精简版本的这些运行和他们的工作。因此,我建议去一些人会考虑老学校。在不同点使用PRINT@d1等,查看两个过程中@d1和@div的实际内容。此外,还应张贴路标,例如打印即将呼叫第二个SP,告知正在运行哪个部件。如果这没有帮助,请计算出正在运行的确切SQL,并手动运行它,以确保它提供了您所期望的结果。与LIKE一起使用时,%符号具有特殊意义。在这种情况下,这并不意味着选择所有内容。奇怪的是,你在问题中添加了关于sp_u前缀的注释,添加了R_u作为另一个前缀,但忽略了与我们即将回答问题相关的部分。