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

نام تاپیک: مشکل استفاده از SELECT توی حلقه WHILE

  1. #1
    کاربر تازه وارد آواتار sheitoonbala
    تاریخ عضویت
    آذر 1386
    محل زندگی
    شیراز
    پست
    54

    مشکل استفاده از SELECT توی حلقه WHILE

    سلام. فرض کنید توی یه کوئری 10 تا متغیر داریم به نام های p0@ و p1@ و p2@ و p3@ و .... تا p9@.
    فرض کنید می خوام مقدار اینها رو تغییر بدم، ولی نمی خوام 10 بار دستور 'select @p1 = 'test رو برای تک تکشون بنویسم. می خوام توی یه حلقه while این کار رو بکنم. بصورت زیر :

    DECLARE @p0 nvarchar(10)
    DECLARE @p1 nvarchar(10)
    DECLARE @p2 nvarchar(10)
    DECLARE @p3 nvarchar(10)
    DECLARE @p5 nvarchar(10)
    DECLARE @p6 nvarchar(10)
    DECLARE @p7 nvarchar(10)
    DECLARE @p8 nvarchar(10)
    DECLARE @p9 nvarchar(10)

    DECLARE @i int
    SET @i=0

    WHILE(@i < 10)
    BEGIN
    EXEC ('select @p' + @i + '=''test''' )
    SET @i = @i + 1
    END

    ولی error می ده. در واقع نمی تونه متغیرها رو انجوری توی EXEC شناسایی کنه.(حق هم داره)
    کسی تا حالا همچین مشکلی داشته؟باید چه جوری کد بنویسم که بتونه متغیرها رو توی حلقه شناسایی کنه و بهشون مقدار بده؟

  2. #2

    نقل قول: مشکل استفاده از SELECT توی حلقه WHILE

    سلام.شما ابتدا یک متغیر از نوع Varchar تعریف کنید بعد اون مقداری رو که داخل Exec نوشتید ابتدا داخل متغیری که تعریف کردید بریزید بعد با استفاده از sp_executesql اونو اجرا کنید.چون خودم اینکارو کردم.

  3. #3
    کاربر تازه وارد آواتار sheitoonbala
    تاریخ عضویت
    آذر 1386
    محل زندگی
    شیراز
    پست
    54

    نقل قول: مشکل استفاده از SELECT توی حلقه WHILE

    ممنون آقای صادقیان. نتونستم درست از SP استفاده کنم.کد بالا رو بصورتی که گفتید تغییر دادم . ببنید :
    DECLARE  @p0 nvarchar(10)
    DECLARE @p1 nvarchar(10)
    DECLARE @p2 nvarchar(10)
    DECLARE @p3 nvarchar(10)
    DECLARE @p5 nvarchar(10)
    DECLARE @p6 nvarchar(10)
    DECLARE @p7 nvarchar(10)
    DECLARE @p8 nvarchar(10)
    DECLARE @p9 nvarchar(10)

    DECLARE @i int
    DECLARE @s nvarchar(2)
    DECLARE @sql nvarchar(max)
    SET @i=0

    WHILE(@i < 10)
    BEGIN
    SELECT @s = CONVERT(nvarchar(2), @i)
    SELECT @sql = 'select @p' + @s + '=''test'''
    EXEC sp_executesql @sql
    SET @i = @i + 1
    END


    ولی همون error های قبلی رو بهم داد. ظاهرا پارامتر ورودی sp هم nvarchar باید باشه،varchar قبول نمی کنه.اگه لطف کنی یه sample ساده برام بذاری یا همین sample رو درست کنی ممنون می شم.

  4. #4

    نقل قول: مشکل استفاده از SELECT توی حلقه WHILE

    هر بلاکی که با sp_executesql یا دستورات مشابه انجام می شود مانند یک کوئری جداگانه است. بنابراین متغیر های @p شما شناخته شده نیست و error هم مربوط به همین است .
    شما باید کل تعریف متغیرها و چیزهای لازم دیگر را به درون بلاک @sql ببرید.اگر کمی دقت کنید به راحتی انجامش می دهید.

  5. #5

    نقل قول: مشکل استفاده از SELECT توی حلقه WHILE

    سلام.ببینید همونطور که دوستمون گفت باید تمامی چیزهایی که گفتی رو داخل یک متغیر varchar بریزی مثل

    declare @strsql varchar(500)
    set @strsql='select * from '+@p1+',...'
    sp_executesql @strsql

  6. #6
    کاربر تازه وارد آواتار sheitoonbala
    تاریخ عضویت
    آذر 1386
    محل زندگی
    شیراز
    پست
    54

    نقل قول: مشکل استفاده از SELECT توی حلقه WHILE

    سلام.ممنون از شما.نحوه استفاده از این sp رو متوجه شدم ، ولی فکر نکنم کاری که من می خوام رو این sp بتونه انجام بده.(حداقل من نتونستم).
    ببنید من در اولین پست گفتم چه کاری می خوام انجام بدم. در واقع می خوام غیر مستقیم به یه متغیر دسترسی پیدا کنم. یه چیزی شبیه findControl در دات نت.
    می شه sample ای رو که گذاشتم به اون صورتی که می خوام تغییر بدید؟
    ممنون

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

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