PDA

View Full Version : سوال: نام جدول بصورت متغیر در دستور Select



بمب منطقی
یک شنبه 10 مرداد 1389, 00:01 صبح
با سلام خدمت اساتید بخش:

چطور میتونم نام جدول رو در دستور select مربوط به SQL بصورت متغیر بکار ببرم.چیزی شبیه به کد زیر(که البته کمپایلر اونو در خط objDA.Fill(objDT); خطا میگیره):



SqlConnection objCON = new SqlConnection();
DataTable objDT = new DataTable();
objCON.ConnectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
String TName="Table1";
DataTable objDT = new DataTable();
SqlDataAdapter objDA = new SqlDataAdapter("SELECT * FROM @TableName", objCON);
objDA.SelectCommand.Parameters.AddWithValue("@TableName", TName);
objCON.Open();
objDA.Fill(objDT);
objCON.Close();

عنوان خطا:
Must declare the table variable "@TableName".

raziee
یک شنبه 10 مرداد 1389, 10:49 صبح
با سلام خدمت اساتید بخش:

چطور میتونم نام جدول رو در دستور select مربوط به SQL بصورت متغیر بکار ببرم.چیزی شبیه به کد زیر(که البته کمپایلر اونو در خط objDA.Fill(objDT); خطا میگیره):



SqlConnection objCON = new SqlConnection();
DataTable objDT = new DataTable();
objCON.ConnectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
String TName="Table1";
DataTable objDT = new DataTable();
SqlDataAdapter objDA = new SqlDataAdapter("SELECT * FROM @TableName", objCON);
objDA.SelectCommand.Parameters.AddWithValue("@TableName", TName);
objCON.Open();
objDA.Fill(objDT);
objCON.Close();

عنوان خطا:
Must declare the table variable "@TableName".

متغیری برای تعریف Table وجود نداره که شما بخواهید Declare کنید.
برای این کار میتونید یک SP بنویسید که نام جدول رو به صورت NVARCHAR به SP بفرسته و در اون SP با T-SQL داده هایی رو که میخواهید Select کنید.
اون T-SQL رو Exec کنید.



DECLARE @T_SQL NVARCHAR(4000)
SET @T_SQL = 'SELECT COUNT(*) FROM [Order]'
exec (@T_SQL)

بمب منطقی
یک شنبه 10 مرداد 1389, 19:36 عصر
آیا راهی بجز Stored procedure وجود نداره؟ آخه تا حالا باهاش کار نکردم.و یادگیریش یکم کارم رو عقب میندازه.ولی با توجه به توصیه ای که کردین براش وقت گذاشتم و مطالعاتی کردم و اینطور که متوجه شدم یا باید از قسمت Server Explorer درVWD اقدام کنم یا از sqldatasource.
من به دیتابیسم از طریق server Explorer متصل نمیشم و connection string ام رو در web.config تعریف کردم و برای این کار خاص ترجیح میدم از روش کدنویسی دستی استفاده کنم و از sqldatasource استفاده نکنم.با توجه به معلومات موجود آیا باز SP رو توصیه میکنید؟

reza_majid68
یک شنبه 10 مرداد 1389, 19:38 عصر
برای چی میخوای از این کار استفاده کنی ؟
تو دستور select فقط میخوای استفاده کنی؟ میتونی اینجوری استفاده کنی :
select * from "+motaghayer+" where . . .

بمب منطقی
یک شنبه 10 مرداد 1389, 20:07 عصر
خیلی عجیبه من این روش ساده رو امتحان کرده بودم ولی جوابی نگرفته بودم! ولی وقتی شما گفتین دوباره امتحان کردم و شد!! جل الخالق. در هرحال ممنونم.

raziee
دوشنبه 11 مرداد 1389, 10:01 صبح
خیلی عجیبه من این روش ساده رو امتحان کرده بودم ولی جوابی نگرفته بودم! ولی وقتی شما گفتین دوباره امتحان کردم و شد!! جل الخالق. در هرحال ممنونم.


select * from "+motaghayer+" where . . .

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

شما همین رو در یک SP بنویس.
در اسم جدول رو به عنوان پارامتر بده به SP.

reza_majid68
دوشنبه 11 مرداد 1389, 10:26 صبح
توی دستورات sql کلا این روش مناسبیه و بیشتر وقتا جواب میده
اگه بعضی وقتا به مشکل بر خوردین به جاش از یه تک کوتیشن و یه جفت کوتیشن کنار هم استفاده کنید .