【问题标题】:Using a scalar function in insert statement causes an exception在插入语句中使用标量函数会导致异常
【发布时间】:2015-09-30 23:07:12
【问题描述】:

当我执行以下查询时,我得到以下异常:

找不到“dbo”列或用户定义的函数,或 聚合“dbo.GET_Vendor_Order_DeductionAmount”,或名称为 模棱两可

我的 SQL:

string strinsert5 = "INSERT INTO VendorWallet(
  VendorID, 
  Amount, 
  WalletTransactionTypeID, 
  Status, 
  DateAdded, 
  OrderID, 
  OrderDeductedAmount,
  ClosingBalance
) values (
  @VendorID,
  @Amount,
  @WalletTransactionTypeID,
  @Status,
  getdate(),
  @OrderID, 
  dbo.[GET_Vendor_Order_DeductionAmount] (@VendorID, " + OperatorID + ",@Amount), 
  dbo.GET_Wallet_Amount(@VendorID)+@Amount)";

请帮帮我。

【问题讨论】:

  • @JamesZ 是的,它存在。以及它的标量函数
  • @JamesZ 是的,它在管理工作室执行
  • @JamesZ yes.same 我正在使用的数据库
  • 请在问题中包含功能代码(不是 cmets)
  • 您是否通过将硬编码数据插入 OrderDeductedAmount 和 ClosingBalance 列进行测试,以排除函数中隐藏的问题。您是否尝试过更明确的方式,例如 [DatabaseName].dbo.[GET_Vendor_Order_DeductionAmount]?

标签: c# asp.net sql-server function


【解决方案1】:

为什么这一切都在这样的字符串中?为什么除了 OperatorID 之外的所有东西都是参数化的?在发布的非常短的代码中存在很多代码气味。但是,您可以通过简单地使用选择而不是值列表来完成这项工作。我会敦促您正确参数化所有内容,而不是大部分内容。

string strinsert5 = "INSERT INTO VendorWallet(
  VendorID, 
  Amount, 
  WalletTransactionTypeID, 
  Status, 
  DateAdded, 
  OrderID, 
  OrderDeductedAmount,
  ClosingBalance
) 
SELECT 
  @VendorID,
  @Amount,
  @WalletTransactionTypeID,
  @Status,
  getdate(),
  @OrderID, 
  dbo.[GET_Vendor_Order_DeductionAmount] (@VendorID, " + OperatorID + ",@Amount), 
  dbo.GET_Wallet_Amount(@VendorID)+@Amount";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多