2016-08-11 4 views
1

Die unten als ich versuchte, einen Fehler auszuführen werfendynamischer SQL in gespeicherten Prozedur-SQL Server 2008

Msg 208, Ebene 16, Status 0, Verfahren CallView, Zeile 11 Ungültige Objektname '#table' .

CREATE PROCEDURE [dbo].[CallView] 
AS 
SET NOCOUNT ON; 
declare @name as varchar (max) 

select @name = VIEW_NAME from ZBT_MAPPING_TABLE MT 
INNER JOIN OUTPUT_DL DL ON MT.COMPID = DL.COMPID 


-- insert to temp table 
INSERT INTO #table 
(
    customerID, 
    PRODUCT, 
    PRODUCT_PRICE 
    ) 
EXEC (N'select * from ' + @name) 

, wenn ich es ausführen

exec [dbo].[CallView] 

es Fehler als

Ungültige Objektnamen '#table' zu werfen. **

kann jemand bitte vorschlagen Was läuft hier falsch und wie können wir es korrigieren? Dank

+0

erstellen temporäre Tabelle (#table) – StackUser

+0

@sagi fehlt: Ich versuche, Daten in temporäre Tabelle zu schieben. – akhrot

+0

@StackUser: Danke – akhrot

Antwort

1

wie diese versuchen,

CREATE PROCEDURE [dbo].[CallView] 
AS 
SET NOCOUNT ON; 

DECLARE @name AS VARCHAR(max) 

CREATE TABLE #table (
    customerID INT Identity(1, 1) 
    ,PRODUCT VARCHAR(100) 
    ,PRODUCT_PRICE DECIMAL(18, 2) 
    ) 

SELECT @name = VIEW_NAME 
FROM ZBT_MAPPING_TABLE MT 
INNER JOIN OUTPUT_DL DL ON MT.COMPID = DL.COMPID 

-- insert to temp table 
INSERT INTO #table (
    customerID 
    ,PRODUCT 
    ,PRODUCT_PRICE 
    ) 
EXEC (N'select * from ' + @name) 

select *from #table 

drop table #table 
1

Sie benötigen die temporäre Tabelle #table zuerst, bevor Sie es, etwas zu schaffen

hinzufügen wie unten vor Insert

Create Table #table 
(
    customerID int Identity(1,1), 
    PRODUCT varchar(100), 
    PRODUCT_PRICE Decimal(18,2) 
) 
0

Sie können dies tun ohne Erstellen einer temporären Tabelle

select * 
into #table 
from MyTable 

aber nicht

INSERT INTO #table 
(
    customerID, 
    PRODUCT, 
    PRODUCT_PRICE 
) 
+0

In der Tat ist die Syntax: 'Select * in # Tabelle von MyTable' Wie auch immer, wenn die Tabelle bereits verfügbar ist, sollte' INSERT ... EXEC' funktionieren. – Lucbert

+0

@Lucbert du hast Recht, es tut mir leid. Was ich meine ist, dass select ... in #tmp möglich ist, ohne zu erstellen, aber fügen Sie in keine – zappasan

+0

Edited und korrigiert – zappasan