2016-05-12 4 views
0

Ich möchte Daten in Prozedur 2 AddTempData von Prozedur 1 AddID1 einfügen. Aber ich kann es nicht tun.Wie Einfügen von Daten in temporäre Tabelle in gespeicherter Prozedur mit einer anderen Prozedur?

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

Was tun Du meinst mit "Aber ich kann es nicht tun."? –

+0

Ich möchte Daten in Prozedur 2 hinzufügen AddTempData von Prozedur 1 AddID1.But wenn ich * aus @TempDataID IDTemp ist null – user3917715

Antwort

1

Unten ist ein vollständiges Arbeitsbeispiel.

Was Ihr Code ..... vielleicht versuchen

insert into @TempDataID (IDTemp) 
    exec AddID1 

Aber die unten arbeiten Beispiele:

/* 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 

nun die bevölkern, zunächst mit einem #temp Tisch.

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 

Sie auch eine @Variable Tabelle (wie Ihr Beispiel)

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

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

Select * from @VariableTableCustomer 

verwenden kann ich alles nur Ihren Code lief (minus eine Zeile), funktioniert es:

--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' was ist das? – user3917715

+0

einfügen in @TempDataID (IDTemp) exec AddID1. Ich habe versucht, aber wenn ich * aus TempDataID, IDTemp ist Null – user3917715

+0

ALFKI ist für mein Northwind-Beispiel. Beachten Sie die "Northwind verwenden". Northwind ist eine db, die Microsoft verteilt und die meisten Leute haben es ... es ist gut für das Schreiben von Beispielen gegen ...... – granadaCoder

Verwandte Themen