Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Payment.PayModeId为[PaymentPayModeId],-用于更新的直通 Payment.StdLedgerId作为[PaymentStdLedgerId],-用于更新的传递 a.RegNo分区上的行数 按a.CenterId、a.Rec_Sql Server_Performance_Sqlclr - Fatal编程技术网

Sql server Payment.PayModeId为[PaymentPayModeId],-用于更新的直通 Payment.StdLedgerId作为[PaymentStdLedgerId],-用于更新的传递 a.RegNo分区上的行数 按a.CenterId、a.Rec

Sql server Payment.PayModeId为[PaymentPayModeId],-用于更新的直通 Payment.StdLedgerId作为[PaymentStdLedgerId],-用于更新的传递 a.RegNo分区上的行数 按a.CenterId、a.Rec,sql-server,performance,sqlclr,Sql Server,Performance,Sqlclr,Payment.PayModeId为[PaymentPayModeId],-用于更新的直通 Payment.StdLedgerId作为[PaymentStdLedgerId],-用于更新的传递 a.RegNo分区上的行数 按a.CenterId、a.RecptKey、a.LedgerDate作为[RownumingGroup]排序 来自大众汽车付款分类账匹配工具a 内部联接支付 ON Payment.RegNo=a.RegNo 其中ABSa.BaseAmount介于abs和payment.Bas

Payment.PayModeId为[PaymentPayModeId],-用于更新的直通 Payment.StdLedgerId作为[PaymentStdLedgerId],-用于更新的传递 a.RegNo分区上的行数 按a.CenterId、a.RecptKey、a.LedgerDate作为[RownumingGroup]排序 来自大众汽车付款分类账匹配工具a 内部联接支付 ON Payment.RegNo=a.RegNo 其中ABSa.BaseAmount介于abs和payment.BaseAmount之间-5 和ABSPayment.BaseAmount+5 和ISNULLa.RefInstNo,0=0 和a.INSTO型 CASTa.StdLedgerID为VARCHAR10+CASTa.InstNo为VARCHAR1 不在 选择CASTb.RefStdLedgerID作为VARCHAR10+ CASTb.RefInstNo AS VARCHAR1 来自大众汽车付款分类账匹配工具b 其中b.RegNo=Payment.RegNo 和b.付款之间的基本金额。基本金额-5 和付款。基本金额+5 和b.InstType=O 按a.CenterId、a.RecptKey、a.LedgerDate排序 更新upd 设置upd.RefInstNo=分类帐.InstNo, upd.refstdlegrid=Ledger.stdlegrid, upd.RefPayModeId=Ledger.PayModeId, upd.REF特许权=分类账特许权, upd.reflumpseash=Ledger.lumpseash, upd.RefConcessionDtl=分类账.ConcessionDtl, upd.RefLumpsumpDtl=Ledger.LumpsumpDtl 从'+@UpdateTable+N'upd 内部联接分类账 在分类账上.PaymentStdLedgerId=upd.StdLedgerId 和Ledger.PaymentPayModeId=upd.PayModeId 其中,[RowNumInGroup]=1-确保与游标中的TOP 1行为相同 '; EXEC@SQL;
可能是因为您正在运行两个嵌套循环,它们不是通过上下文连接发出SQL查询,而且这些查询没有参数化。看起来您将受益于广泛的SQL Server最佳实践和性能教程。@usr在支付时只有一个循环。读取对于大表中的每一行,您将执行另外两个查询。这就是200000个查询,其中一半是更新。而且对大型表的更新成本很高,尤其是在有索引的情况下。除了srutzky的出色回答之外,在更新之前,将索引放在更新的表上。并在更新完成后重新创建它们。
  var paymentSql =String.Format("select PaymodeId,StdLedgerId,BaseAmount,RegNo/*,REfInstno,RefStdLedgerId,RefPaymodeId*/ from vw_Payment_Ledger_Matching_Other {0} {1}" ,(condition.Equals("") ? "" : " where " + condition) ," order by CenterId,Ledgerdate,RecptKey ");

                var payment = new SqlCommand(paymentSql, conn1) { CommandTimeout = 600 };

                using (SqlDataReader payments = payment.ExecuteReader())
                {
                    while (payments.Read())
                    {
                        var paymentPaymodeId = payments["PaymodeId"];
                        var paymentStdLedgerId = payments["StdLedgerId"];
                        var paymentAmount = payments["BaseAmount"];
                        var paymentRegNo = payments["RegNo"];
                        //var paymentRefInstNo = payments["RefInstNo"];
                        //var paymentRefStdLedgerId = payments["RefStdLedgerId"];
                        //var paymentRefPayModeId = payments["RefPayModeId"];

                        //if (Convert.ToInt32(paymentRefInstNo) == 0 && Convert.ToInt32(paymentRefStdLedgerId) == 0 && paymentRefPayModeId.Equals("0"))
                        {
                            var ledgerSql = String.Format("select paymodeId,StdLedgerId,Instno,Concession,LumpSump,ConcessionDtl,LumpSumpDtl from vw_Payment_Ledger_Matching_inst a where a.regno='{0}' and abs(a.BaseAmount) between  abs({1})-5 and abs({1})+5 and Isnull(a.refInstno,0)=0 and a.insttype<>'O'" +
                                                   "and (cast(a.StdLedgerID as varchar(10))+cast(InstNo as varchar(1))) not in ( select cast(b.refStdLedgerID as varchar(10))+cast(b.refInstNo as varchar(1)) from vw_Payment_Ledger_Matching_inst b"
                                                   +" where b.regno='{0}'  and (b.BaseAmount) between  ({1})-5 and ({1})+5 and b.Insttype='O' )"
                                                   +" order by a.CenterId,a.RecptKey,a.LedgerDate ",paymentRegNo,paymentAmount );
                            var Ledger = new SqlCommand(ledgerSql, conn2) { CommandTimeout = 600 };
                            SqlDataReader ledger = Ledger.ExecuteReader();
                            if (ledger.Read())
                            {
                                var ledgerPayModeId = ledger["PayModeID"];                                    
                                var ledgerStdLedgerId = ledger["StdLedgerId"];
                                var ledgerInstNo = ledger["InstNo"];
                                var ledgerConcession = ledger["Concession"];
                                var ledgerLumpsump = ledger["Lumpsump"];
                                var ledgerConcessionDtl = ledger["ConcessionDtl"];
                                var ledgerLumpsumpDtl = ledger["LumpsumpDtl"];

                                var updatesql = "update " + updateTable + " set RefInstno=" + ledgerInstNo
                                                + ", RefStdLedgerId=" + ledgerStdLedgerId + ""
                                                + ", RefPayModeId='" + ledgerPayModeId + "'"
                                                + ", RefConcession=" + ledgerConcession
                                                + ", RefLumpsump=" + ledgerLumpsump
                                                + ", RefConcessionDtl=" + ledgerConcessionDtl
                                                + ", RefLumpsumpDtl=" + ledgerLumpsumpDtl
                                                + " where stdLedgerId=" + paymentStdLedgerId
                                                + " and PayModeId='" + paymentPaymodeId + "'";
                                var ledgerUpdate = new SqlCommand(updatesql, conn3);
                                ledgerUpdate.ExecuteNonQuery();                                    
                            }
                        }
                    }
                }
For each record in Query A
{
  Get a row from Query B
  Update a table via Query C, using the row from Query B
}