it-swarm.com.de

Führen Sie die gespeicherte Prozedur in der dynamischen temporären Tabelle aus

Meines Wissens nach; Was ich tun möchte, ist in SQL nicht möglich, aber es lohnt sich, Sie zu fragen.

Nehmen wir an, ich habe eine gespeicherte Prozedur abc, die die Spalten Id und Value zurückgibt. Diese gespeicherte Prozedur wird hauptsächlich aus funktionalen Gründen von anderen Abteilungen verwendet, und ich werde sie nur gelegentlich für die Datenprüfung verwenden.

Also als Teil meiner gespeicherten Prozedur verwenden:

DECLARE @tABC TABLE
(
   ID      INT,
   Value   DECIMAL(12,2)
)

INSERT INTO @tABC
   EXEC OtherDb.DataProd.abc

Oky, das funktioniert jetzt perfekt, aber was ist, wenn sie die Struktur ihrer gespeicherten Prozedur ändern?

Durch das Hinzufügen oder Entfernen einer Spalte aus ihrer gespeicherten Prozedur wird mein Code beschädigt. Es gibt also eine Möglichkeit, meinen Code flexibler zu gestalten.

Mein letzter verzweifelter Versuch lief ungefähr so ​​ab:

WITH tempTable AS
(
    EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable

Was offensichtlich kläglich gescheitert ist.

14
JAT
SELECT * INTO #TempTable 
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
     'EXEC OtherDb.DataProd.abc')

SELECT * FROM #TempTable
8
Raj

In eine temporäre Tabelle einfügen. Ich weiß, dass dies 2008 und darüber hinaus funktioniert, nicht sicher über 2005. Ihre temporären Tabellenspalten müssen mit Ihren Stored Proc-Spalten übereinstimmen.

create table #mytable (custid int,company varchar(50),contactname varchar(50)
                , phone varchar(50),address1 varchar(50)
                , address2 varchar(50),city varchar(50)
                ,st varchar(2),Zip varchar(20))

insert into #mytable (custid,company,contactname,phone,address1,address2,city,st,Zip)
exec dbo.sp_Node_CustomerList_wService @segid = 1

select * from #mytable
where custid = 5

drop table #mytable
6
Tim Melton

Ansonsten schauen Sie hier vorbei, dort werden weitere Optionen erläutert: Ergebnisse einer gespeicherten Prozedur in eine temporäre Tabelle einfügen ?

0
NickyvV

es ist besser und einfacher, openrowset zu verwenden

SELECT * INTO #tempTable FROM OPENROWSET ('SQLNCLI', 'Server = localhost; Trusted_Connection = yes;', 'EXEC OtherDb.DataProd.abc')

0
Ali Yesilli