লিঙ্ক থেকে স্ক্যুয়াল: কীভাবে দ্রুত কোনও টেবিল সাফ করবেন


88

একটি সারণীতে সমস্ত সারি মুছে ফেলতে, আমি বর্তমানে নিম্নলিখিতগুলি করছি:

context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();

তবে এটি বয়সের সময় নিচ্ছে বলে মনে হচ্ছে। একটি দ্রুত উপায় আছে কি?


আপনি দ্রুত এবং নিরাপদে মুছে ফেলার জন্য কোনও সঞ্চিত প্রকল্প ব্যবহার করছেন না এমন কোনও কারণ? আপনি proc dbml সম্মুখের ম্যাপ থাকতে পারে
Perpetualcoder

4
আপনি কি প্রতিটি টেবিলের জন্য একটি তৈরি করতে হবে না? নাকি?
সুইভিশ

উত্তর:


126

আপনি ডেটা কনটেক্সট.এক্সেকিউটকম্যান্ড পদ্ধতি ব্যবহার করে একটি সাধারণ এসকিউএল কেটে বা কমান্ড মুছে ফেলতে পারেন :

context.ExecuteCommand("DELETE FROM Entity");

বা

context.ExecuteCommand("TRUNCATE TABLE Entity");

আপনি যেভাবে মুছছেন তা দীর্ঘ সময় নিচ্ছে কারণ লিঙ্ক থেকে এসকিউএল প্রতিটি সত্তার জন্য একটি বিলোপ বিবৃতি জেনারেট করে , ব্যাচ মুছে ফেলার / আপডেট করার জন্য অন্যান্য ধরণের-সুরক্ষিত পদ্ধতি রয়েছে, নীচের নিবন্ধগুলি দেখুন:


"মুছে ফেলুন" শব্দটি ঠিক করতে ভুলবেন না
ডেভিড

9
আমি এটি +1 করেছি। এখানে ট্রান্সকেট (যা আমি মনে করি আপনি করতে চান) এর মধ্যে পার্থক্য ব্যাখ্যা করার একটি উল্লেখ রয়েছে এবং মুছুন: mssqltips.com/tip.asp?tip=1080
ডেভিড

4
ডেভিডের মন্তব্যে +1: মুছে ফেলার চেয়ে কাটা কাটা খুব দ্রুত হতে পারে
ফ্রেডরিক মের্ক

4
@ ডেভিড: এই সমস্যাটি সত্তা ফ্রেমওয়ার্ক ( লিনক-টু-প্রতিষ্ঠানসমূহ ) এর সাথে সুনির্দিষ্ট , আমি TRUNCATEলিনক-টু-এসকিউএল
ক্রিশ্চান সি। সালভাদিকে

4
ট্রানসেট যে কোনও অটো ইনডেক্সিং প্রতিষ্ঠিত হয়েছে (সাধারণত একটি আইডি কলাম) সাফ করবে তাই আপনি যদি এটি পুনরায় সেট করতে না চান তবে সাবধান হন। থেকে মুছে ফেলবে না।
জিসিসার

20

দুর্ভাগ্যক্রমে লিনকু-টু-এসকিউএল সেট বেইজড কোয়েরিগুলি খুব ভালভাবে চালায় না।

আপনি যে ধরে নিতে হবে

context.Entities.DeleteAllOnSubmit(context.Entities); 
context.SubmitChanges(); 

মত কিছু অনুবাদ করা হবে

DELETE FROM [Entities]

তবে দুর্ভাগ্যক্রমে এটি আরও ভালো লেগেছে

DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...
DELETE FROM [dbo].[Entities] WHERE ([EntitiesId] = @p0) AND ([Column1] = @p1) ...

আপনি যখন লিনিক্যু-টু-এসকিউএল-এ বাল্ক আপডেট করার চেষ্টা করবেন তখন আপনি একইটি পাবেন। একসাথে কয়েক শতাধিক সারি আর এটি খুব ধীর হতে চলেছে।

আপনার যদি ব্যাচের ক্রিয়াকলাপ করা দরকার থাকে এবং আপনি লিনকিউ-টু এসকিউএল ব্যবহার করছেন তবে আপনার সঞ্চিত পদ্ধতিগুলি লিখতে হবে।


12

আমি নীচে প্রতি একটি এক্সটেনশন পদ্ধতি ব্যবহার করতে চাই:

public static class LinqExtension
{
  public static void Truncate<TEntity>(this Table<TEntity> table) where TEntity : class
  {
    var rowType = table.GetType().GetGenericArguments()[0];
    var tableName = table.Context.Mapping.GetTable(rowType).TableName;
    var sqlCommand = String.Format("TRUNCATE TABLE {0}", tableName);
    table.Context.ExecuteCommand(sqlCommand);
  }
}

0

আপনি এটি ব্যবহার করতে পারেন:

Public void BorraFilasTabla()
{
 using(basededatos db = new basededatos())
 {
  var ListaParaBorrar = db.Tabla.Tolist();
  db.Tabla.RemoveRange(ListaParaBorrar); 
 }
}

প্রশ্নটি হ'ল: "কোন দ্রুত উপায় আছে?" এটি কীভাবে দ্রুত হবে? এছাড়াও, এটি এসকিউএল থেকে লিংক নয়।
গার্ট আর্নল্ড

-1

সি # কোডের নীচে এসকিউএল-তে লিনকিউ ব্যবহার করে একটি ডাটাবেস টেবিলের সন্নিবেশ / আপডেট / মুছুন / মুছুন সমস্ত ব্যবহার করা হয়

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace PracticeApp
{
    class PracticeApp
    {        
        public void InsertRecord(string Name, string Dept) {
            LinqToSQLDataContext LTDT = new LinqToSQLDataContext();
            LINQTOSQL0 L0 = new LINQTOSQL0 { NAME = Name, DEPARTMENT = Dept };
            LTDT.LINQTOSQL0s.InsertOnSubmit(L0);
            LTDT.SubmitChanges();
        }

        public void UpdateRecord(int ID, string Name, string Dept)
        {
            LinqToSQLDataContext LTDT = new LinqToSQLDataContext();
            LINQTOSQL0 L0 = (from item in LTDT.LINQTOSQL0s where item.ID == ID select item).FirstOrDefault();
            L0.NAME = Name;
            L0.DEPARTMENT = Dept;
            LTDT.SubmitChanges();
        }

        public void DeleteRecord(int ID)
        {
            LinqToSQLDataContext LTDT = new LinqToSQLDataContext();
            LINQTOSQL0 L0;
            if (ID != 0)
            {
                L0 = (from item in LTDT.LINQTOSQL0s where item.ID == ID select item).FirstOrDefault();
                LTDT.LINQTOSQL0s.DeleteOnSubmit(L0);
            }
            else
            {
                IEnumerable<LINQTOSQL0> Data = from item in LTDT.LINQTOSQL0s where item.ID !=0 select item;
                LTDT.LINQTOSQL0s.DeleteAllOnSubmit(Data);
            }           
            LTDT.SubmitChanges();
        }

        static void Main(string[] args) {
            Console.Write("* Enter Comma Separated Values to Insert Records\n* To Delete a Record Enter 'Delete' or To Update the Record Enter 'Update' Then Enter the Values\n* Dont Pass ID While Inserting Record.\n* To Delete All Records Pass 0 as Parameter for Delete.\n");
            var message = "Successfully Completed";
            try
            {
                PracticeApp pa = new PracticeApp();
                var enteredValue = Console.ReadLine();                
                if (Regex.Split(enteredValue, ",")[0] == "Delete") 
                {
                    Console.Write("Delete Operation in Progress...\n");
                    pa.DeleteRecord(Int32.Parse(Regex.Split(enteredValue, ",")[1]));
                }
                else if (Regex.Split(enteredValue, ",")[0] == "Update")
                {
                    Console.Write("Update Operation in Progress...\n");
                    pa.UpdateRecord(Int32.Parse(Regex.Split(enteredValue, ",")[1]), Regex.Split(enteredValue, ",")[2], Regex.Split(enteredValue, ",")[3]);
                }
                else
                {
                    Console.Write("Insert Operation in Progress...\n");
                    pa.InsertRecord(Regex.Split(enteredValue, ",")[0], Regex.Split(enteredValue, ",")[1]);
                }                                
            }
            catch (Exception ex)
            {
                message = ex.ToString();
            }
            Console.Write(message);            
            Console.ReadLine();                        
        }
    }
}

4
কিছু ব্যাখ্যা যুক্ত করুন
ইয়াহিয়া হুসেন হুসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.