2012-10-02 55 views
1

臨時表我研究這一點,最近聽上去很像的解決辦法可能是這樣...... dynamically creating the #temp table and then used to insert the data插入與存儲過程中沒有發生

不幸的是,我不確定是否完全適用。所以,我的問題。當我執行下面的存儲過程時,我的臨時表是空的。當然,如果我單獨運行每個步驟來導入他們工作的數據。我假設存儲過程中存在EXEC問題。我有2個臨時表,我正在嘗試創建並插入和從他們組裝我的數據...提前謝謝。

ALTER PROC [taxes_ext_sp] 
AS 
BEGIN 
CREATE TABLE ##taxes (
     [Apply Date] date 
     , [Journal Code] varchar(8) 
     , [Journal Ctrl #] varchar(16) 
     , [Company] varchar(8) 
     , [Description] varchar(255) 
     , [Invoice #] varchar(16) 
     , [Credit] decimal(20,2) 
     , [Debit] decimal(20,2) 
     , [Balance] decimal(20,2)); 

CREATE TABLE ##company (
company_code varchar(32)); 

DECLARE @company_id Nvarchar(MAX) 
     , @db_name varchar(32) 
     , @sql Nvarchar(MAX); 

SELECT @company_id = 
company_code FROM ctrl.dbo.comp; 

SELECT @db_name = 
name FROM sys.databases 
JOIN ctrl.dbo.comp 
    ON sys.databases.name = ctrl.dbo.comp.db_name 
JOIN ##company 
    ON ##company.company_code = ctrl.dbo.comp.company_code; 

SET @sql = 'INSERT INTO ##taxes 
SELECT convert(varchar(12),dateadd(dd,(trx.date_applied - 639906),''1/1/1753''),101) --as [Date] 
     , trx.journal_type --as [Journal Code] 
     , trx.journal_ctrl_num --as [Journal Ctrl #] 
     , '[email protected]_id+' --as Company 
     , trx.journal_description --as [Description] 
     , trxdet.document_1 --as [Invoice #] 
     , bal.home_credit --as [Total Home Credit] 
     , bal.home_debit --as [Total Home Debit] 
     , bal.current_balance --as [Balance] 
FROM '[email protected]_name+'.dbo.trx trx      
LEFT OUTER JOIN '[email protected]_name+'.dbo.trxdet trxdet 
    ON trx.journal_ctrl_num = trxdet.journal_ctrl_num 
LEFT OUTER JOIN '[email protected]_name+'.dbo.bal bal 
    ON trxdet.account_code = bal.account_code 
WHERE trx.date_posted > 0 
    AND trx.date_applied >= ''734503'' 
    AND trx.date_applied <= ''734775'')'; 

EXEC (@company_id); **FORGOT TO ADD THIS. 
EXEC (@sql); 


SELECT * FROM ##taxes; 
--SELECT * FROM ##company 

--IF EXISTS 
--(
--SELECT * 
--FROM tempdb.dbo.sysobjects 
--WHERE ID = OBJECT_ID(N'tempdb..##taxes') 
--) 
--BEGIN 
--DROP TABLE ##taxes 
--END 

--IF EXISTS 
--(
--SELECT * 
--FROM tempdb.dbo.sysobjects 
--WHERE ID = OBJECT_ID(N'tempdb..##company') 
--) 
--BEGIN 
--DROP TABLE ##company 
--END 

END; 
+1

沒有必要使用全局臨時表(''##)。在外部作用域('exec'外部)創建的本地臨時表('#')將可以在內部作用域中訪問。 –

回答

1

您創建##公司,但不填充,然後嘗試使用## company.company_code加入它,因此@db_name可以爲NULL。很可能@sql變量等於NULL。 如果您嘗試來連接nvarchar的領域,他們中的一個NULL,結果將是NULL

編輯 食譜How to check if a parameter is null or empty sql

+0

D'oh!感謝Alexander。現在修復它... – PuroRock

+0

我想現在遇到的困難是什麼時候/在哪裏調用每個變量。我一直在看這個劇本太久了。 – PuroRock

+0

返回此請求SELECT * FROM ctrl.dbo.comp –