简体   繁体   English

将临时表传递到另一个存储过程

[英]passing a temporary table into another stored procedure

i would like to do this: 我想这样做:

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

i need @TmpTable to be a subset of someTable and i don't want to implicitly declare a structure with fields for @TmpTable , rather i want it to be dynamically created from someTable. 我需要@TmpTable是的一个子集someTable ,我不想隐式声明的结构与领域@TmpTable ,而我希望它从someTable动态创建。

is this possible? 这可能吗?

thanks so much for you help and guidance! 非常感谢您的帮助和指导!

i've taken the suggestion to try the temporary table. 我已经建议尝试临时表。 however, i am getting the error: 但是,我得到了错误:

  The table #SubSet does not exist in the database

here's the code: 这是代码:

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
select * 
into #temptable
from someTable 
where someTable.Column1='BLAH'

just change "@" to "#" ;) You can also use CTE for this as well. 只需将“ @”更改为“#”;)您也可以为此使用CTE。 Link 链接

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

where A is the Alias of your "temporary table". 其中A是您的“临时表”的别名。 After that you can select it like another normal table. 之后,您可以像选择另一个普通表一样选择它。 Just know that you CAN'T make and Order By in the select * from someTable where someTable.Column1='BLAH' 只要知道你不能拨打和Order Byselect * from someTable where someTable.Column1='BLAH'

here is what i did! 这是我所做的!

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

thank you everyone for your extraordinary help! 谢谢大家的非凡帮助!

i went with a permanent table and just keep dropping it! 我去了一个永久性的桌子,只是把它扔掉!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM