PDA

View Full Version : سوال: ارسال نام جدول به صورت پارامتر به Query



bmanfy
چهارشنبه 26 فروردین 1388, 18:14 عصر
سلام دوستان .
چه طوری میشه نام جدول و فیلدهای جدول رو به صورت پارامتر به یه Query یا SP فرستاد و از اونها استفاده کرد .
کد زیر رو در نظر بگیرید :


Procedure @FieldName , @TableName
as
begin
Select @FieldName From @Tablename
end


ممنون .

shervin farzin
چهارشنبه 26 فروردین 1388, 22:14 عصر
سلام

create proc test1 @field_name char(20),@table_name char(20)
as
exec('select '+@field_name+' from '+@table_name)
مثال استفاده

exec test1 'first_name','personel'
موفق باشيد

bmanfy
پنج شنبه 27 فروردین 1388, 08:28 صبح
با تشکر از پاسختون .
آیا روش دیگری هم هست برای این کار ؟

daffy_duck376
پنج شنبه 27 فروردین 1388, 10:37 صبح
شما میتونی دستورات SQL رو به صورت RUN TIME به کوئری بدی
QURY.SQL.CLEAR
QUARY .sQL.ADD(SELECT ....)

bmanfy
پنج شنبه 27 فروردین 1388, 21:12 عصر
شما میتونی دستورات SQL رو به صورت RUN TIME به کوئری بدی

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

bmanfy
پنج شنبه 27 فروردین 1388, 21:18 عصر
دوست عزیز اقای shervin Farzin راهی رو گفتن اما خوب :
چنتا مشکل پیش میاد . مثلا کد زیر رو در نظر بگیرید :


Declare @a int
Exec('Set @a=10')

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

در کل نوشتن دستورات هم در قالب یک رشته کار رو مقداری دشوار میکنه و از طرفی از خوانایی برنامه کاهش میده .
ایا روشی نیست که بشه این دستورات رو به یک شکل دیگه نوشت ؟

shervin farzin
جمعه 28 فروردین 1388, 01:11 صبح
سلام
كدي كه شما قرار دادين قابل اجراء نيست ، از طرفي براي اجراء كدي مشابه اون نيازي هم به
استفاده از exec نيست . استفاده از exec براي سوالي كه در پست 1 مطرح كرديد لازمه ، اما در ساير موارد شايد راههاي بهتري وجود داشته باشه . بنابر اين پيشنهاد ميكنم شما بفرماييد كه
دقيقا چه كاري مد نظرتون هست كه انجام بديد .
موفق باشيد .

bmanfy
جمعه 28 فروردین 1388, 11:32 صبح
دقيقا چه كاري مد نظرتون هست كه انجام بديد .


البته در پست 6 کاملا هدفم رو گفتم :
هدف اصلی من به این شکله . من تعدای جدول شبیه هم اما تنها با نامهای متفاوت دارم . که میخوام برای انجام عملیات بر روی اونها از یک Sp استفاده کنم . و برای اینکه کد اضافی ننوشته باشم میخوام برای همه ی اونها از یک Sp استفاده کنم و نام جدول و فیلدهای رو به صورت پارامتر بهش ارسال کنم .
با تشکر .

shervin farzin
جمعه 28 فروردین 1388, 11:41 صبح
سلام

من تعدای جدول شبیه هم اما تنها با نامهای متفاوت دارم . که میخوام برای انجام عملیات بر روی اونها از یک Sp استفاده کنم .
بله . اينو متوجه شدم . منظورم كدي بود كه مي خواين داخل SP بنويسيد و به فرمايش خودتون از
دستور EXEC براش نميتونيد استفاده كنيد .

bmanfy
جمعه 28 فروردین 1388, 11:51 صبح
Sp رو که میخوای بسازم در حالت ایدال به شکل زیره


Create Procedure AddTbl(@Value int , @field , @TblName ))
As
Begin
Declare @Num int
if Not Exists (select id from @Tbl) then
Set @Num = 1
Esle
Select @Num=Max(Id)+1 from @TblName
Insert into @TblName Values(@num , @Value)
Return 0
End


مشه گفت به این شکل .

shervin farzin
جمعه 28 فروردین 1388, 19:29 عصر
سلام
در كد SQL كه نوشتيد نبايد بعد از شرط If از Then استفاده كنيد .
من كد شما رو تغيير دادم و نتيجه شد اين :

Create Procedure AddTbl
@Value int,
@field char(20),
@TblName char(20)
As
exec
(
'Declare @Num int '+
'if Not Exists (select id from '+@TblName+') Set @Num = 1 Else Select @Num = Max(Id)+1 from '+@TblName+' '+
'Insert into '+@TblName+' Values (@num,'+@Value+')'
)

در كد بالا به Space هايي كه در انتهاي خطوط 8 و 9 مخصوصا ايجاد كردم توجه كنيد .
موفق باشيد .

bmanfy
شنبه 29 فروردین 1388, 11:08 صبح
با تشکر از پاسختون .



در كد SQL كه نوشتيد نبايد بعد از شرط If از Then استفاده كنيد

بله درسته . ظاهرا اشتباه تایپی بوده .

پست اخر شما با استفاده از همون Exec هستش که قبلا فرموده بودید . از این هم استفاده کردم نتیجه هم گرفتم .
البته چنتا مشکل کوچک هم داشت . که تو پست های قبلی بیان کردم .
سوال بعدی من این بود روش دیگری هم هست ؟