2016-05-12 5 views
0

プロシージャ1 AddID1からプロシージャ2 AddTempDataにデータを挿入します。しかし、私はそれをすることはできません。別の手順でストアドプロシージャの一時テーブルにデータを挿入する方法はありますか?

create proc AddID1 
as 
begin 
declare @TempData table 
(
    ID int 
) 
insert into @TempData select P.Id from Product as P 
select * from @TempData 
end 

create proc AddTempData 
as 
begin 
declare @TempDataID table 
(
    IDTemp int 
) 
insert into @TempDataID exec AddID1 
select * from @TempDataID 
end 
+0

あなたは「しかし、私はそれをすることはできません」という意味ですか? –

+0

手続き2にデータを挿入したいAddID1.But @TempDataIDから*を選択するとIDTempがnull – user3917715

答えて

1

以下は完全な実施例である。限り、あなたのコードとして

.....多分

insert into @TempDataID (IDTemp) 
    exec AddID1 

を試してみてください。しかし、以下の作業をしている例:

/* START TSQL CODE */ 

/* Stored Procedure Definition */ 

Use Northwind 
GO 


IF EXISTS 
    (
    SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_TYPE = N'PROCEDURE' and ROUTINE_SCHEMA = N'dbo' and ROUTINE_NAME = N'uspOrderDetailsByCustomerId' 
    ) 
BEGIN 
    DROP PROCEDURE [dbo].[uspOrderDetailsByCustomerId] 
END 


GO 

CREATE Procedure dbo.uspOrderDetailsByCustomerId 
(
    @CustomerID nchar(5) 
) 
AS 

BEGIN 

    SET NOCOUNT ON 



     SELECT 
      c.CustomerID, c.CompanyName /*,c.ContactName,c.ContactTitle,c.[Address],c.City,c.Region,c.PostalCode,c.Country ,c.Phone,c.Fax */ 
     FROM 
      Customers c 
      JOIN Orders o ON c.CustomerID = o.CustomerID /* this join here just to provide extra rows for the example */ 
     WHERE 
      c.CustomerID = @CustomerID 

END 

を今移入を、最初#TEMPテーブルで。

IF OBJECT_ID('tempdb..#TempCustomer') IS NOT NULL 
    begin 
      drop table #TempCustomer 
    end 


    CREATE TABLE #TempCustomer 
    ( 
     [CustomerID] nchar(5) 
    , [CompanyName] nvarchar(40) 
    ) 

INSERT INTO #TempCustomer ([CustomerID] , [CompanyName]) 
exec dbo.uspOrderDetailsByCustomerId 'ALFKI' 

Select * from #TempCustomer 


    IF OBJECT_ID('tempdb..#TempCustomer') IS NOT NULL 
    begin 
      drop table #TempCustomer 
    end 
私はすべてのコード(マイナス1ライン)を走っ

declare @VariableTableCustomer table 
    ( 
     [CustomerID] nchar(5) 
    , [CompanyName] nvarchar(40) 
    ) 

INSERT INTO @VariableTableCustomer ([CustomerID] , [CompanyName]) 
exec dbo.uspCustomerByCustomerId 'ALFKI' 

Select * from @VariableTableCustomer 

あなたはまた、それが動作します(あなたの例のように)@Variable表を使用することができ

--drop proc AddID1 
GO 

create proc AddID1 
as 
begin 
declare @TempData table 
(
    ID int 
) 


insert into @TempData 
/*select P.Id from Product as P */ 
/* note, i'm commenting out the above line and using the below line since I don't have your db table/rows */ 
select 333 union all select 444 union all select 555 


select * from @TempData 
end 


GO 



/* make sure hte procedure works...as you desire..before trying to stuff it into a temp or varaible table */ 
EXEC AddID1 

GO 




--drop proc AddTempData 
GO 


create proc AddTempData 
as 
begin 
declare @TempDataID table 
(
    IDTemp int 
) 
insert into @TempDataID (IDTemp) exec AddID1 
select 'Inside_AddTempData' as MyPlace , * from @TempDataID 
end 

GO 

EXEC AddTempData 
+0

「ALFKI」これは何ですか? – user3917715

+0

@TempDataID(IDTemp)exec AddID1に挿入します。私は試みましたが、*をTempDataIDから選択すると、IDTempはNULLになります – user3917715

+0

ALFKIは私のNorthwindの例です。 「Northwindを使用する」に注意してください。 NorthwindはMicrosoftが配布しているデータベースであり、ほとんどの人はそれを持っています...例を書こうとするとよいでしょう...... – granadaCoder

関連する問題