1

我对此进行了一些研究,最接近的相关解决方案可能是这个...... 动态创建#temp表,然后用于插入数据

不幸的是,我不确定它是否完全适用。因此,我的问题。当我执行以下存储过程时,我的临时表是空的。当然,如果我单独运行每个步骤来导入数据,它们就可以工作。我假设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 #]
        , '+@company_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 '+@db_name+'.dbo.trx trx                       
LEFT OUTER JOIN '+@db_name+'.dbo.trxdet trxdet
    ON trx.journal_ctrl_num = trxdet.journal_ctrl_num
LEFT OUTER JOIN '+@db_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;
4

1 回答 1

1

您创建##company,但不填写,然后尝试使用##company.company_code 加入它,因此@db_name 可以为NULL。@sql 变量很可能等于 NULL。如果您尝试连接 nvarchar 字段并且其中一个为 NULL,则结果将为 NULL

编辑 食谱如何检查参数是否为空或空sql

于 2012-10-02T14:26:19.030 回答