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

نام تاپیک: ارسال نام جدول از طریق پارامتر به SP

  1. #1
    کاربر تازه وارد آواتار heartshunter
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Task Manager
    پست
    75

    Question ارسال نام جدول از طریق پارامتر به SP

    من یه sp دارم که کار insert تو یه جدول رو انجام میده
    آیا من میتونم اسم جدول هم رو با پارامتر ارسال کنم چون میخوام کار آرشیو سازی رو ماهانه انجام بدم

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    سحابي #C ستاره ي Java
    پست
    192

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    فكر نكنم كاري بشه كرد تلاش هاي منم براي اين موضوع كاملاً بي نتيجه بود چه تو اين سايت چه تو سايت هاي خارجي الان يه دو ماهي ميگذره كه من پستمو تو بعضي از سايت هاي معروف گذاشتم اما حتي هيچ كس نگفته كه آيا اين كار ممكنه يا نه؟
    در هر صورت اگه خبري شد به ما هم بگو.

  3. #3
    کاربر جدید
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    Osoyoos, BC
    پست
    3

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    Sorry to write in English

    In my opinion, may be you need to redesign your application, it's not a good approach to send table for a store procedure, anyway you need to code Dynamic SQL, I don't have any idea about your tables structure, then let me just bring a general example:

    USE AdventureWorksLT

    CREATE PROCEDURE getName
    @tblname sysname,
    @key varchar(10)
    AS
    BEGIN
    DECLARE @sql nvarchar(4000)
    SELECT @sql = ' SELECT FirstName, LastName ' +
    ' FROM ' + @tblname +
    ' WHERE CustomerID = @key'
    EXEC sp_executesql @sql, N'@key varchar(10)', @key
    SELECT @key
    END

    DECLARE @myTbl sysname, @myKey INT
    SET @myTbl = 'SalesLT.Customer'
    SET @myKey = 10
    SELECT @myTbl, @myKey
    EXEC getName @myTbl, @myKey


    Hope that helps

  4. #4
    کاربر تازه وارد آواتار heartshunter
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Task Manager
    پست
    75

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    راستش زیاد سر در نیاوردم میشه بیشتر توضیح دهید

  5. #5
    کاربر تازه وارد آواتار heartshunter
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    Task Manager
    پست
    75

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    نقل قول نوشته شده توسط heartshunter مشاهده تاپیک
    من یه sp دارم که کار insert تو یه جدول رو انجام میده
    آیا من میتونم اسم جدول هم رو با پارامتر ارسال کنم چون میخوام کار آرشیو سازی رو ماهانه انجام بدم
    کسی تا حالا همخین کاری انجام نداده ؟؟
    یه کمکی کنید کارم لنگه

  6. #6

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    سلام

    دوست عزیز شاید این کارتو راه بندازه .

    declare @tblname varchar(20)
    set @tblname='tblcountry'
    DECLARE @sql nvarchar(4000)
    SELECT @sql = ' SELECT * ' +
    ' FROM ' + @tblname
    EXEC sp_executesql @sql

  7. #7

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    تا جایی که خودم یکبار تست کردم، راه حل این است که نام جدول را به صورت کاراکتر ارسال کنید و سپس کوئری مورد نظر را به صورت کاراکتری ساخته و از EXEC استفاده کنید و آن را اجرا کنید.

    شبیه به این :


    declare @sql varchar(max)
    select @sql = 'select * from [' + @TableName + ']'
    exec (@sql)

    نکته : کد بالا و کدهایی شبیه به این شدیدا مستعد حملات sql injection هستند. در این مورد مراقب باشید

    -----------------------------------------------

    اگر (!! ) میشد کاری شبیه به این کرد بسیار جالب می بود: (این مورد را تست نکرده ام)




    declare @
    tblname varchar(20)

    SELECT * FROM
    (
    select TOP(1) * from sysobjects where type = 'U' and name=@tblname )

    باز هم عرض میکنم که راه بالا جای تست و بررسی دارد که اگر فرصت شد آن را تصحیح میکنم

  8. #8

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    نقل قول نوشته شده توسط greateprogrammer مشاهده تاپیک
    سلام

    دوست عزیز شاید این کارتو راه بندازه .

    declare @tblname varchar(20)
    set @tblname='tblcountry'
    DECLARE @sql nvarchar(4000)
    SELECT @sql = ' SELECT * ' +
    ' FROM ' + @tblname
    EXEC sp_executesql @sql
    دوست گرامی
    این دستور کار نخواهد کرد.
    با احترام

  9. #9

    نقل قول: ارسال نام جدول از طریق پارامتر به SP

    سلام به همه دوستان،
    استفاده از یک SP عمومی (که قائدتا Dynamic TSQL هم خواهد بود) چندین عیب فنی داره که از نظر عموم برنامه نویسها پوشیده است (از جمله SQL Injection، به هدر دادن حافظه سرور، Recompileهای متعدد و ...).
    جز در موارد خاص و قابل توجیه، چنین کاری توصیه نمیشه. در دیتابیسهایی که اصولی طراحی میشن، هر جدول حداقل سه SP برای ویرایش خواهد داشت. از داشتن SPهای زیاد نگران نباشید!

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

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