View Full Version : مقادیر متغیر برای ستون و نام جدول در sp
pikoolas
جمعه 13 فروردین 1389, 02:58 صبح
سلام.
چگونه می توان در stored procedure برای نام جدول و ستون از متغیر استفاده ؟
من می خوام این کارو برای sp زیر انجام بدم.
@newsid int,
@language char(3)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT text from tbl_news where newsid=@newsid and language=@language
END
محمد سلیم آبادی
جمعه 13 فروردین 1389, 13:13 عصر
سلام،
برای اینکه این قابلیت ایجاد شود تا از یک متغیر/پارامتر به عنوان نام جدول یا ستون استفاده کنیم ناچاریم از Dynamic SQL بهره مند شویم.
برای این منظور از SP مخصوص اینکار میشود استفاده کرد ولی برای راحتی کار من از دستور EXEC به این شکل عمل می کنم. به جای عبارت مربوط به SELECT از این عبارت استفاده کنین:
DECLARE @Command VARCHAR(25);
SET @Command = 'SELECT ' + @column_name + ' FROM ' + @table_name +
'WHERE newsid = ' + @newsid + ' AND language = ' + QUOTENAME(@language, '''');
EXECUTE(@Command);
pikoolas
چهارشنبه 18 فروردین 1389, 21:43 عصر
سلام،
برای اینکه این قابلیت ایجاد شود تا از یک متغیر/پارامتر به عنوان نام جدول یا ستون استفاده کنیم ناچاریم از Dynamic SQL بهره مند شویم.
برای این منظور از SP مخصوص اینکار میشود استفاده کرد ولی برای راحتی کار من از دستور EXEC به این شکل عمل می کنم. به جای عبارت مربوط به SELECT از این عبارت استفاده کنین:
DECLARE @Command VARCHAR(25);
SET @Command = 'SELECT ' + @column_name + ' FROM ' + @table_name +
'WHERE newsid = ' + @newsid + ' AND language = ' + QUOTENAME(@language, '''');
EXECUTE(@Command);
من از این دستور استفاده کردم ولی همیشه اولین ردیف را انتخاب میکنه . یعنی انگار قسمت where کار نمی کنه .
من کدهای برنامه رو با c# نوشتم .
public string select(string cloumn_nameValue,string table_nameValue,string newsidValue,string languageValue)
{
cmd.Parameters.Add("@column_name", SqlDbType.NVarChar).Value =cloumn_nameValue;
cmd.Parameters.AddWithValue("@table_name", SqlDbType.NVarChar).Value = table_nameValue;
cmd.Parameters.AddWithValue("@newsid", SqlDbType.NVarChar).Value = newsidValue;
cmd.Parameters.AddWithValue("@language", SqlDbType.NVarChar).Value = languageValue;
return trycatchScalar();
}
private string trycatchScalar()
{
try
{
cn.Open();
string selected;
selected=(string)cmd.ExecuteScalar();
cn.Close();
return selected;
}
catch (Exception ex)
{
return ex.ToString();
}
}
محمد سلیم آبادی
چهارشنبه 18 فروردین 1389, 21:56 عصر
به جای اون کدی که قبلا پست کردم از این کد استفاده کنید:
DECLARE @Command VARCHAR(2000);
SET @Command = 'SELECT ' + @column_name +
' FROM ' + @table_name +
' WHERE newsid = ' + CAST(@newsid AS VARCHAR(5))+
' AND language = ' + QUOTENAME(@language, '''');
EXECUTE(@Command);
pikoolas
چهارشنبه 18 فروردین 1389, 22:39 عصر
این خطا رو می ده
Must declare the scalar variable "@newsid".
محمد سلیم آبادی
چهارشنبه 18 فروردین 1389, 22:43 عصر
مگر قرار نشد از این تکه کد داخل SP استفاده کنید. این newsid هم یکی پارامتر های ورودی به SP هست دیگه.
محمد سلیم آبادی
چهارشنبه 18 فروردین 1389, 23:49 عصر
چون پارامتر @newsid را جای انداختین. در قسمت تعریف پارمترهای ورودی SP آن رو بنویسین.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.