2012-06-14 47 views
2

我想做到這一點:傳遞一個臨時表到另一個存儲過程

DECLARE @TmpTable TABLE = select * from someTable where someTable.Column1='BLAH' 

我需要@TmpTable是的someTable一個子集,我不希望與領域隱含聲明結構@TmpTable,而是我希望它從someTable動態創建。

這是可能的嗎?

非常感謝您的幫助和指導!

我已經採取了建議嘗試臨時表。但是,我得到的錯誤:

The table #SubSet does not exist in the database 

下面的代碼:

DECLARE @StartDT DATE 
DECLARE @MinDOS DATE 
SELECT @MinDOS = MIN(dos) FROM accn_demographics 
SELECT @StartDT = 
    CAST(CAST(datepart(YYYY,@MinDOS) AS varchar) + '-' + CAST(datepart(mm,@MinDOS) AS varchar) + '-' + CAST('01' AS varchar) AS DATETIME) 
DECLARE @FileLocation VARCHAR(50) 
DROP TABLE #SubSet 
WHILE @StartDT < '20110901' 
BEGIN 
    SELECT * 
     INTO #SubSet 
    FROM ViewAccountDetail 
    WHERE datepart(yyyy,ViewAccountDetail.DOS) = datepart(yyyy,@StartDT) 
     AND datepart(mm,ViewAccountDetail.DOS) = datepart(mm,@StartDT) 
    SET @FileLocation='C:\test\'+'ViewAccountDetail'+cast(@StartDT as varchar)+'.csv' 
    EXEC BCP_Text_File #SubSet, @FileLocation  
    SET @StartDT = DATEADD(MONTH,1,@StartDT) 

    DROP TABLE #SubSet 
END 
+0

使用時間上表 '選擇*到#TEMP其中someTable.Column1 ='BLAH'' 然後你可以使用#TEMP的廠名定爲@TmpTable –

+0

可以請你告訴我我怎麼能做到這一點? –

+0

對不起,正在編輯哈哈。你不需要聲明任何東西,你只需要插入 –

回答

0

這是我做的!

DECLARE @StartDT DATE 
DECLARE @MinDOS DATE 
SELECT @MinDOS = MIN(dos) FROM accn_demographics 
SELECT @StartDT = 
CAST(CAST(datepart(YYYY,@MinDOS) AS varchar) + '-' + CAST(datepart(mm,@MinDOS) AS varchar) + '-' + CAST('01' AS varchar) AS DATETIME) 
DECLARE @FileLocation VARCHAR(50) 
DROP TABLE #SubSet 
WHILE @StartDT < '20110901' 
BEGIN 
SELECT * 
INTO SubSet 
FROM ViewTransactionDetails 
WHERE datepart(yyyy,ViewTransactionDetails.DOS) = datepart(yyyy,@StartDT) 
AND datepart(mm,ViewTransactionDetails.DOS) = datepart(mm,@StartDT) 
SET @FileLocation='C:\test\'+'ViewTransactionDetails'+cast(@StartDT as varchar)+'.csv' 
EXEC BCP_Text_File SubSet, @FileLocation  
SET @StartDT = DATEADD(MONTH,1,@StartDT) 

DROP TABLE SubSet 
END 

謝謝大家的非凡幫助!

我去了一個永久表,只是不斷下降!從someTable

5
select * 
into #temptable 
from someTable 
where someTable.Column1='BLAH' 

只是改變 「@」,以 「#」),也可以使用CTE爲這一點。 Link

+0

太棒了!我可以選擇* 到#temptable from'@'someTable where'@'someTable.Column1 ='BLAH'???因爲'@'someTable是一個變量 –

+0

我不得不把它放在''因爲stackoverflow不喜歡它 –

+0

看看CTE看看它是否更適合你的工作。 –

1
WITH A 
AS 
(
    select * from someTable where someTable.Column1='BLAH' 
) 

其中A是您的「臨時表」的別名。之後,你可以選擇它像另一個正常的表。只知道你不能 make和Order Byselect * from someTable where someTable.Column1='BLAH'

+0

非常感謝這是一個很好的解決方案。我有一個微小的問題 –

+0

偉大的幫助,哪個問題? –

+0

我在我的商店程序中聲明瞭WITH。然後我有一個WHILE循環。看來我無法在我的while循環中看到WITH? –

相關問題