0

问题:

在将数据插入另一个数据库的数据库上使用 SqlCommand() 运行 Sql 命令后,以下所有语句都会出错,并带有 ExceptionInvalid 对象名称。

问题:

为什么会这样?

附加信息:

我知道如何通过在选择部分的表之前添加临时数据库名称来修复它,但是由于它是在该数据库的上下文中运行的,所以这不是必需的,而且当我在 SQL 管理工作室中单独运行语句时也不是

程序逻辑:

  1. 创建并填充临时数据库(所有表 ASI_...)
  2. 在临时数据库的上下文中选择数据,然后将其插入另一个数据库(@AcuDB)
  3. 对 X 查询重复步骤 2

插入代码:

if (TempD.State == System.Data.ConnectionState.Closed) TempD.Open();
                            Command = new SqlCommand(temp, TempD);
                            Command.CommandTimeout = 0;
                            Command.ExecuteNonQuery(); 

在之前的类似语句之后运行的示例 Sql 出现错误:

插入@AcuDB ..Batch (公司ID,分支机构ID,模块,BatchNbr,CreditTotal,DebitTotal,ControlTotal,CuryCreditTotal,CuryDebitTotal,CuryControlTotal,CuryInfoID,LedgerID,BatchType,状态,AutoReverse,AutoReverseCopy,OrigModule,OrigBatchNbr,DateEntered,Released,Posted, LineCntr,CuryID,ScheduleID,NoteID,CreatedByID,CreatedByScreenID,CreatedDateTime,LastModifiedByID,LastModifiedByScreenID,LastModifiedDateTime,Hold,Description,Scheduled,Voided,FinPeriodID,TranPeriodID) 选择 2, 1,Module,BatchNbr,CreditTotal,DebitTotal,ControlTotal,CuryCreditTo ,CuryControlTotal,i.CuryInfoID, isnull((从@AcuDB..ledger中选择a.LedgerID a.LedgerCD = b.LedgerID),0) [LedgerID],BatchType,Status,AutoReverse,AutoReverseCopy,OrigModule,OrigBatchNbr, DateEntered [DateEntered],Released,Posted,LineCntr,b.CuryID,ScheduleID,NoteID, 'B5344897-037E-4D58-B5C3-1BDFD0F47BF9' [CreatedByID],'00000000' [CreatedByScreenID],GETDATE() [CreatedDateTime],'B5344897-037E-4D58-B5C3-1BDFD0F47BF9' [LastModifiedByID],LastModifiedByID],'00000' GETDATE() [LastModifiedDateTime],Hold,Description,Scheduled,Voided,b.FinPeriodID,TranPeriodID from Temp..ASI_GLBatch b 内部连接 ​​@AcuDB..CurrencyInfo i on i.CuryEffDate = b.DateEntered 交叉连接 @AcuDB..glsetup g其中 b.companyID = @CpnyCD 和 b.branchID = @BranchCDTranPeriodID 来自 Temp..ASI_GLBatch b 内部连接 ​​@AcuDB..CurrencyInfo i on i.CuryEffDate = b.DateEntered 交叉连接 @AcuDB..glsetup g 其中 b.companyID = @CpnyCD 和 b.branchID = @BranchCDTranPeriodID 来自 Temp..ASI_GLBatch b 内部连接 ​​@AcuDB..CurrencyInfo i on i.CuryEffDate = b.DateEntered 交叉连接 @AcuDB..glsetup g 其中 b.companyID = @CpnyCD 和 b.branchID = @BranchCD

4

1 回答 1

0

由于 SQL 试图暗示上下文的方式,像这样跨越数据库总是不稳定的。在这种情况下,除非@AcuDB包含包含数据库和模式的完全限定地址,否则由于切换上下文的方式,您将遇到错误。了解@AcuDB包含的内容并尝试在存储过程中运行批处理。如果必须的话,设置一个单独的实例来沙箱化场景。C# 的结尾将继续使事情复杂化,直到你把它剪掉一点并确保你的 SQL 是好的。确定没问题后,将其重新集成到 C# 代码中并从那里开始工作。

于 2012-10-30T16:48:15.380 回答