ورود

View Full Version : مشکل با استور پروسیجر



ehsane
پنج شنبه 21 مهر 1384, 07:49 صبح
دوستان با سلام

چگونه میتوان نام بانک را در یک استور پروسیجر بصورت متغییر تعیین کرد بطور مثال :


Select * From @Name_of_Table

سید مسعود موحد
پنج شنبه 21 مهر 1384, 10:39 صبح
دوست عزیز
شما باید اسنور پروسیجر را بصورت داینامیک بنویسید
شما باید ابتدا متن را به صورت زیر بنویسید

CREATE PROC Test
@FileName : VarChar
AS
DECLARE @SQL VarChar
SET @SQL = 'SELECT * From ' + @FileName
EXECSQL @SQL

titbasoft
پنج شنبه 21 مهر 1384, 11:03 صبح
(با حفظ copyright آقای ثباتی): این کار باعث ساخته شدن مجدد execution plan می شه پس حتی المقدور خوبه که ازش استفاده نشه!

سید مسعود موحد
پنج شنبه 21 مهر 1384, 11:10 صبح
دوست عزیز
از راهنمایی شما متشکرم ولی آیا راه حل دیگری شما سراغ دارید
اگر در اختیار بذارید منم متشکر میشم چون من خودم تا الان فقط ار این روش استفاده میکردم

titbasoft
پنج شنبه 21 مهر 1384, 12:09 عصر
پیداش کردم: http://www.barnamenevis.org/forum/showthread.php?t=23805

AminSobati
پنج شنبه 21 مهر 1384, 21:57 عصر
احسان جان برای چی باید اسم جدول متغیر باشه؟ مطمئن هستید که این تنها راه حل مشکل شماست؟

ehsane
شنبه 23 مهر 1384, 08:41 صبح
دوست عزیزم جناب AminSobati
من در یکی از برنامه هایم کاربران با انتخاب یکسری گزینه بانک مربوطه به خودشان را فعال می کنند و این گزینه های متغییر است مثلا ممکن فردی بانکی با نام DA_1384_P_0724 را درخواست کند که این نام با توجه به نیاز کاربر به موارد مختلف تهیه و بانک مربوطه باز می شود حال میخواهم این نام تهیه شده که بانک آن نیز در اس کیو ال قرار دارد را با یک استور پروسیجر فعال و یکسری گزارشات خاص را تهیه کنم که نیاز به پاس کردن نام بانک به استور پروسیجر بصورت متغییر دارم.
اگه راه حل دیگه ای به نظر شما میرسه راهنمایی کنید؟

AminSobati
یک شنبه 24 مهر 1384, 23:18 عصر
احسان جان امیدوارم مشکل رو خوب درک کرده باشم:
پیشنهاد من اینه که بوسیله Dynamic TSQL برای هر دیتابیس، SP ایجاد کنین و کاربرها از طریق این SP به اطلاعاتشون دسترسی پیدا کنند. حسن این کار اینه که Dynamic TSQL فقط یکبار در موقع ساخت SP انجام میشه و در دفعات بعدی کاربرها واقعا SP مربوط به خودشون رو Call میکنند. مثلا:


use northwind
go
declare @tbl_name varchar(100)
declare @DynTSQL varchar(1000)
set @tbl_name='customers'
set @DynTSQL='create proc mysp1 as select * from ' + @tbl_name
exec (@DynTSQL)
go

حالا هر کاربر میتونه در دیتابیس خودش exec mysp1 رو Call کنه و جدول مورد نظر براش Query بشه.