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

Sql server 出于某种原因,我的存储过程不返回任何内容

Sql server 出于某种原因,我的存储过程不返回任何内容,sql-server,sql-server-2008,tsql,stored-procedures,Sql Server,Sql Server 2008,Tsql,Stored Procedures,我正在创建一个从多个表返回数据的存储过程,因此它有几个块,最终生成一个临时表。唯一的问题是它没有生产任何东西。所有单独的块似乎都起作用,但作为一个整体,它不起作用 我觉得我可能遗漏了一些小的东西,因此非常感谢您的意见 @ref_num VARCHAR(20) AS BEGIN SET NOCOUNT ON; BEGIN TRY DECLARE @clKey INT DECLARE @clName VARCHAR(50) SET @clKey = (SE

我正在创建一个从多个表返回数据的存储过程,因此它有几个块,最终生成一个临时表。唯一的问题是它没有生产任何东西。所有单独的块似乎都起作用,但作为一个整体,它不起作用

我觉得我可能遗漏了一些小的东西,因此非常感谢您的意见

@ref_num    VARCHAR(20)

AS
BEGIN
    SET NOCOUNT ON;

BEGIN TRY

    DECLARE @clKey INT
    DECLARE @clName VARCHAR(50)
    SET @clKey = (SELECT ClearingBroker FROM DocumentRecieved WHERE ref_num = @ref_num)
    SET @clName = (SELECT EB_Name FROM EB_Company WHERE EB_dtc_num = @clKey)

    SELECT
                a.ref_num
                ,b.DateSent
                ,b.Document as 'FormName'
                ,b.ClearingBroker as 'ClearingBrokerID'
                ,b.ExecutingBroker as 'ExecutingBrokerID'
                ,c.EB_Name
                ,a.AccountName
    INTO        
                #Temp1
    FROM
                EB_Company c JOIN PBIN_records a ON c.EB_dtc_num = a.eb_key 
                             JOIN DocumentRecieved b ON a.ref_num = b.ref_num 
    WHERE
                a.ref_num = @ref_num

--================================================================================================

    CREATE TABLE 
                #Temp2 (
                            ClearingBroker  VARCHAR(50)
                        )

--================================================================================================

    INSERT INTO
                #Temp2  (
                            ClearingBroker
                        )

    VALUES
                        (
                            @clName
                        )

--================================================================================================                      

    SELECT
            fName + ' ' + lName as 'SentBy'
    INTO
            #Temp3
    FROM
            Master_Contacts JOIN PBIN_records ON PBIN_records.eb_contact_key = Master_Contacts.contactID
    WHERE
            PBIN_records.ref_num = @ref_num

--================================================================================================

    SELECT
            #Temp1.ref_num,
            #Temp1.FormName,
            #Temp1.DateSent,
            #Temp1.ClearingBrokerID,
            #Temp2.ClearingBroker,
            #Temp1.ExecutingBrokerID,
            #Temp1.EB_Name,
            #Temp1.AccountName,
            #Temp3.SentBy
    INTO
            #Temp4
    FROM
            #Temp1, #Temp2, #Temp3

--================================================================================================

    SELECT
            *
    FROM
            #Temp4

--================================================================================================

END TRY

编辑:之所以出现此问题,是因为我的一个表目前没有记录,它破坏了整个过程,因为我的最终选择是前三个临时表之间的笛卡尔积。

问题:您真的想要在Temp1、Temp2、Temp3之间的笛卡尔积吗?我这样问是因为Temp1,Temp2,Temp3代表笛卡尔积

可能的原因之一是这三个表中有一个没有行

示例:下面的查询

SELECT  *
FROM    (SELECT 1 UNION ALL SELECT 2) AS TableA(ID)
CROSS JOIN (SELECT 1 WHERE 1=0) AS TableB(ID)
输出0行

ID          ID
----------- -----------

(0 row(s) affected)

问:你真的想要一个介于Temp1,Temp2,Temp3之间的笛卡尔积吗?我这样问是因为Temp1,Temp2,Temp3代表笛卡尔积

可能的原因之一是这三个表中有一个没有行

示例:下面的查询

SELECT  *
FROM    (SELECT 1 UNION ALL SELECT 2) AS TableA(ID)
CROSS JOIN (SELECT 1 WHERE 1=0) AS TableB(ID)
输出0行

ID          ID
----------- -----------

(0 row(s) affected)


您是否尝试过在没有插入的情况下进行倒数第二次选择,以查看它将要插入到temp4中的内容。似乎没有什么能让它如此成功。因为我还是一无所获…@mucio我没有commit@mucio我是否需要在每次事务后提交,还是只在存储过程结束时提交?您是否尝试了从第二次到最后一次选择,而不使用INTO来查看它将要插入到TEMP4中的内容似乎没有什么可以做到这一点。因为我还是一无所获…@mucio我没有commit@mucio我是否需要在每次事务后提交,还是只在存储过程结束时提交?我的一个临时表没有任何行,这就是为什么要放弃它?@Carson:是的。在我的示例中,TableB有0行。将这三个表插入表4的更好方法是什么?@Carson:这取决于您想要/需要什么结果。也许你应该使用FROM Temp1 LEFT/RIGHT/FULL JOIN Temp2 ON。我现在就试试这个!谢谢我的一张临时表没有一行,这就是我要扔掉它的原因吗?@Carson:是的。在我的示例中,TableB有0行。将这三个表插入表4的更好方法是什么?@Carson:这取决于您想要/需要什么结果。也许你应该使用FROM Temp1 LEFT/RIGHT/FULL JOIN Temp2 ON。我现在就试试这个!谢谢