نمایش نتایج 1 تا 4 از 4

نام تاپیک: يك insert خاص

  1. #1

    يك insert خاص

    سلام . قبلش بگم هرچي سايت رو گشتم چنين موضوعي رو پيدا نكردم

    فرض كنيد يك جدول داريد داراي يك فيلد بنام F و يك ميليون ركورد . محتويات فيلد بصورت زير مي باشد


    a#12#555#4484#11922#5854#8588#21821#215421
    b#12#55#4544#11252#5454#8288#21521#2122221
    C#‎12#5785#4454#11222#5554#8488#21221#21221
    d#12#5255#4244#11222#5254#8188#21221#21221



    حدود بيست آيتم كه با دستور شارپ # از هم جدا شده اند و همه يكسان مي باشنذد از نظر تعداد #

    حال مي خواهيم با دستور select * into اين فيلد ها كه با # جدا شده است را جدا و در جدول B كه جديد مي سازيم و داراي 20 فيلد و همان تعداد ركورد است بريزيم . آيا كسي از دوستان با اس كيو ال چنين كاري كرده است يا نه
    البته با دلفي برنامه اش رو نوشته ام ولي سرعت اجراي اس كيو ال يه چيز ديگه است .
    با تشكر

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: يك insert خاص

    اگه واقعاً هر رکورد فقط از تعدادی آیتم که با علامت شارپ از هم جدا شدن تشکیل شده و نه چیز دیگه:

    اگه یک تک رکورد رو بخواید منتقل کنید هر کدوم رو می تونید با Dynamic SQL به این صورت در جدول مقصد درج کنید:

    declare @f varchar(200)
    declare @sql varchar(max)
    select @f = f from SourceTable where pk = @pk

    set @sql = 'insert into TargetTable(f) values (''' + replace(@f,'#','''),(''') + ''')'
    execute @sql


    اگر تمام رکوردهای جدول رو می خواید یکباره درج کنید می تونید این کار رو بکنید:

    set @sql = stuff(
    (select '#'+f from SourceTable for xml path('')),1,1,'')

    set @sql = 'insert into TargetTable(f) values (''' + replace(@sql,'#','''),(''') + ''')'
    execute @sql

  3. #3

    نقل قول: يك insert خاص

    سلام . مي شه بگيد اين كد چه كاري انجام مي دهد . منظور من جدا سازي فيلد هايي كه با # از هم جدا شده اند و كپي اطلاعات در جدول جديد كه به تعداد # فيلد دارد

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: يك insert خاص

    البته یادم رفت بگم. کُد بالا تو SQL Server 2008 جواب می ده (برای SQL Server 2005 و ما قبل یه تغییر کوچیک لازم داره).

    همون طور که می دونید اگه می خواستید دستی اعداد رو insert کنید باید چنین کاری انجام می دادید:

    insert into TargetTable(f) values (555),(4484),(11922),(5854), ...


    من کاری که کردم در رشته ای مثل

    555#4484#11922#5854#8588#21821#215421

    علامت # رو با رشته " '),(' " جایگزین (Replace) کردم. بعد به سر و ته رشته به دست اومده عبارت های لازم رو اضافه کردم تا بتونم اسکریپت insert نهایی رو بسازم. بعد هم اونو execute کردم.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •