PDA

View Full Version : مبتدی: تابعی یا پراسیجری که موجودیت یه تیبل رو بررسی کنه



neda_dela
شنبه 13 شهریور 1389, 16:22 عصر
سلام دوستان
من با سی شارپ کار می کنم و بانکم اس کیو ال 2000 هست .
حالا یه جایی از برنامه باید یه if بذارم و میخام بررسی کنم که اگر تیبل a1 موجود هست اطلاعات جدید رو به انتهای اون اضافه کنه و اگه موجود نیست اون تیبل رو بسازه
یه چیزی مثل تابع exist
حالا لطفا منو در رابطه با کوئری های مربوط به این قضیه راهنمایی کنین ممنون:لبخندساده:

بهزادصادقی
شنبه 13 شهریور 1389, 16:39 عصر
ببین یک همچه چیزی می تواند کمکت کند یا خیر:



if object_id( 'dbo.a1' ) is not null begin

insert a1 ...

end else begin

create table a1 ...

insert a1 ...

end;

neda_dela
یک شنبه 14 شهریور 1389, 23:12 عصر
ببین یک همچه چیزی می تواند کمکت کند یا خیر:



if object_id( 'dbo.a1' ) is not null begin

insert a1 ...

end else begin

create table a1 ...

insert a1 ...

end;

مرسی من زیاد تجربه کار ندارم . این کدی که نوشتید باید توی خود اس کیو ال نوشته بشه؟
اگه که نه با چه زبانی نوشتیدش؟ میشه بیشتر توضیح بدید

بهزادصادقی
دوشنبه 15 شهریور 1389, 22:57 عصر
این متن خود کد نیست. بلکه یک چهار چوب برای یک کد است . کد لازم در این رویکرد باید به زبان Transact-SQL که به آن T-SQL هم می گویند نوشته شود. شما با این زبان آشنایی دارید، یا لازم است توضیحاتی بدهم؟

neda_dela
پنج شنبه 18 شهریور 1389, 12:51 عصر
این متن خود کد نیست. بلکه یک چهار چوب برای یک کد است . کد لازم در این رویکرد باید به زبان Transact-SQL که به آن T-SQL هم می گویند نوشته شود. شما با این زبان آشنایی دارید، یا لازم است توضیحاتی بدهم؟
نه من اصلا زیاد تجربه کاری ندارم لطفا توضیح بدید دوست من
ممنون از لطفتون
:لبخندساده:

بهزادصادقی
پنج شنبه 18 شهریور 1389, 18:34 عصر
شما با س شارپ کار می کنی. پس می دانی یک زبان برنامه نویسی چیست. ولی اگر با پایگاه داده ها زیاد کار نکردی، احتمالا فکر می کنی که پایگاه داده ها فقط یک انیار است، یک مخزن برای ذخیره کردن داده های ما. ما این داده ها را توی سی شارپ از کاربر می گیریم، و بعد با استفاده از کنترل های محیط NET. که از طریق سی شارپ به آنها دسترسی داریم، آن داده ها را توی پایگاه داده هایمان ذخیره می کنیم. هر وقت هم دوباره لازم داشتیم به آنها دسترسی پیدا کنیم، از طریق همان کنترل های دات نت آنها را فراخوانی می کنیم. پس، پایگاه داده ها تقریبا می شود یک قفسه بایگانی داده های که توی کامپیوتر ماست. آیا این درست است؟ آیا این نزدیک به دید شما نسبت به SQL Server می باشد؟

ولی یک پایگاه داده ها خیلی بیشتر از اینهاست. علاوه بر داده هایی که شما می توانید در یک پایگاه داده ها ذخیره کنید، شما می توانید در آن پایگاه داده ها برنامه هایی را به وجود بیاورید که روی آن داده ها مانور می دهند. مثلا، شما می توانید یک برنامه بنویسید که میانگین سن همه دانشجویان یک دانشگاه، که داده هایشان در آن پایگاه داده ها ثبت و دخیره شده را به دست بیاورید.

بعد، شما می توانید آن برنامه را، که محل زندگی و وجودش همان محیط پایگاه داده ها می باشد از طریق سی شارپ فراخوانی کنید. یعنی شما می توانید با استفاده از سی شارپ به SQL Server بگویید: ببخشید، آن برنامه ای را که من در محیط شما پیاده سازی کرده بودم یادتان می آید؟ می شود بی زحمت آن را الان اجرا کنید؟ SQL Server هم می گوید: چشم. اسم اون برنامه چی بود؟ شما هم اسم برنامه را به او می دهید (البته همه این گفتمان از طریق سی شارپ انجام می شود) و او هم برنامه شما را اجرا می کند.

به برنامه هایی که این چینن در محیط پایگاه داده ها پیاده سازی و آماده اجرا شده اند stored procedure می گویند. یعنی procedure هایی که ذخیره شده اند. کجا ذخیره شده اند؟ در محیط پایگاه داده ها.

خوب، این برنامه ها به چه زبانی نوشته می شوند؟ در SQL Server، زبانی را که ما ازش استفاده می کنیم برای برنامه نویسی اسمش Transact-SQL یا به عبارتی T-SQL می گویند.

آیا این مطالب مفهوم واقغ شد؟

neda_dela
دوشنبه 29 شهریور 1389, 13:04 عصر
شما با س شارپ کار می کنی. پس می دانی یک زبان برنامه نویسی چیست. ولی اگر با پایگاه داده ها زیاد کار نکردی، احتمالا فکر می کنی که پایگاه داده ها فقط یک انیار است، یک مخزن برای ذخیره کردن داده های ما. ما این داده ها را توی سی شارپ از کاربر می گیریم، و بعد با استفاده از کنترل های محیط NET. که از طریق سی شارپ به آنها دسترسی داریم، آن داده ها را توی پایگاه داده هایمان ذخیره می کنیم. هر وقت هم دوباره لازم داشتیم به آنها دسترسی پیدا کنیم، از طریق همان کنترل های دات نت آنها را فراخوانی می کنیم. پس، پایگاه داده ها تقریبا می شود یک قفسه بایگانی داده های که توی کامپیوتر ماست. آیا این درست است؟ آیا این نزدیک به دید شما نسبت به SQL Server می باشد؟

ولی یک پایگاه داده ها خیلی بیشتر از اینهاست. علاوه بر داده هایی که شما می توانید در یک پایگاه داده ها ذخیره کنید، شما می توانید در آن پایگاه داده ها برنامه هایی را به وجود بیاورید که روی آن داده ها مانور می دهند. مثلا، شما می توانید یک برنامه بنویسید که میانگین سن همه دانشجویان یک دانشگاه، که داده هایشان در آن پایگاه داده ها ثبت و دخیره شده را به دست بیاورید.

بعد، شما می توانید آن برنامه را، که محل زندگی و وجودش همان محیط پایگاه داده ها می باشد از طریق سی شارپ فراخوانی کنید. یعنی شما می توانید با استفاده از سی شارپ به SQL Server بگویید: ببخشید، آن برنامه ای را که من در محیط شما پیاده سازی کرده بودم یادتان می آید؟ می شود بی زحمت آن را الان اجرا کنید؟ SQL Server هم می گوید: چشم. اسم اون برنامه چی بود؟ شما هم اسم برنامه را به او می دهید (البته همه این گفتمان از طریق سی شارپ انجام می شود) و او هم برنامه شما را اجرا می کند.

به برنامه هایی که این چینن در محیط پایگاه داده ها پیاده سازی و آماده اجرا شده اند stored procedure می گویند. یعنی procedure هایی که ذخیره شده اند. کجا ذخیره شده اند؟ در محیط پایگاه داده ها.

خوب، این برنامه ها به چه زبانی نوشته می شوند؟ در SQL Server، زبانی را که ما ازش استفاده می کنیم برای برنامه نویسی اسمش Transact-SQL یا به عبارتی T-SQL می گویند.

آیا این مطالب مفهوم واقغ شد؟
بله بله بسیار ممنون و متشکر ولی انگار من باید یه دوره اس کیو ال برم بگذرونم ولی اگه بتونید منو پله به پله کمکم کنید ممنون میشم البته اگه این طوری برای شما سخت نیست

بهزادصادقی
دوشنبه 29 شهریور 1389, 14:20 عصر
بله بله بسیار ممنون و متشکر ولی انگار من باید یه دوره اس کیو ال برم بگذرونم ولی اگه بتونید منو پله به پله کمکم کنید ممنون میشم البته اگه این طوری برای شما سخت نیست

شرمنده من نمی تونم به این صورت به شما کمک کنم. شما نیاز داری حالا یک دوره مقدماتی نباشد، یک کتاب مقدماتی حداقل در زمینه SQL Server و C شارپ مطالعه کنی، وگرنه من به اندازه یک کتاب باید اینجا مطلب بنویسم

ولی هر گونه سوالات موضعی و مشخص که داشبته باشی، در خدمت شما هستم.

neda_dela
چهارشنبه 31 شهریور 1389, 19:07 عصر
شرمنده من نمی تونم به این صورت به شما کمک کنم. شما نیاز داری حالا یک دوره مقدماتی نباشد، یک کتاب مقدماتی حداقل در زمینه SQL Server و C شارپ مطالعه کنی، وگرنه من به اندازه یک کتاب باید اینجا مطلب بنویسم

ولی هر گونه سوالات موضعی و مشخص که داشبته باشی، در خدمت شما هستم.
مرسی از لطفتون می دونم که این کارم درست نیست و نباید که کدهای مربوط به سی شارپ رو اینجا بذارم . مدیران محترم لطف کنید حذف نکنید خواهشا
این یه بخشی از کد هست هر کدوم از دوستان که می تونن من. راهنمایی کنن

SqlDataAdapter da = new SqlDataAdapter();
SqlConnection con = new SqlConnection();
SqlCommand com = new SqlCommand();
BindingSource bs = new BindingSource();
private void button1_Click(object sender, EventArgs e)
{
com.CommandText = "create table archivst(code bigint NOT NULL primary key,id bigint NOT NULL,firstname nvarchar(50) NOT NULL,lastname nvarchar(50) NOT NULL) insert into archivst select * from [st-sabt] where id='" + textBox1.Text + "'";
com.Connection = con;
com.CommandType = CommandType.Text;
con.ConnectionString = "data source=.;initial catalog=quran;integrated security=True";
da.SelectCommand = com;
con.Open();
com.ExecuteNonQuery();
com.CommandText = "delete [st-sabt] where years=" + textBox1.Text;
con.Close();
MessageBox.Show("عملیات با موفقیت انجام شد");
}
حالا وقتی که دوباره می خام ثبت جدید توی این تیبل انجام بدم خطا میده میده که طبیعی هم هست چون این تیبل یه بار ساخته شده و نباید دوباره create بشه

بهزادصادقی
چهارشنبه 31 شهریور 1389, 19:37 عصر
مرسی از لطفتون می دونم که این کارم درست نیست و نباید که کدهای مربوط به سی شارپ رو اینجا بذارم . مدیران محترم لطف کنید حذف نکنید خواهشا
این یه بخشی از کد هست هر کدوم از دوستان که می تونن من. راهنمایی کنن

SqlDataAdapter da = new SqlDataAdapter();
SqlConnection con = new SqlConnection();
SqlCommand com = new SqlCommand();
BindingSource bs = new BindingSource();
private void button1_Click(object sender, EventArgs e)
{
com.CommandText = "create table archivst(code bigint NOT NULL primary key,id bigint NOT NULL,firstname nvarchar(50) NOT NULL,lastname nvarchar(50) NOT NULL) insert into archivst select * from [st-sabt] where id='" + textBox1.Text + "'";
com.Connection = con;
com.CommandType = CommandType.Text;
con.ConnectionString = "data source=.;initial catalog=quran;integrated security=True";
da.SelectCommand = com;
con.Open();
com.ExecuteNonQuery();
com.CommandText = "delete [st-sabt] where years=" + textBox1.Text;
con.Close();
MessageBox.Show("عملیات با موفقیت انجام شد");
}
حالا وقتی که دوباره می خام ثبت جدید توی این تیبل انجام بدم خطا میده میده که طبیعی هم هست چون این تیبل یه بار ساخته شده و نباید دوباره create بشه

به جای این قسمت از query خود به زبان SQL:



create table archivst(code bigint NOT NULL primary key,id bigint NOT NULL,firstname nvarchar(50) NOT NULL,lastname nvarchar(50) NOT NULL)


از این استفاده کنید ببینید فرقی می کند:



if object_id( 'dbo.archivist' ) is null begin create table archivst(code bigint NOT NULL primary key,id bigint NOT NULL,firstname nvarchar(50) NOT NULL,lastname nvarchar(50) NOT NULL) end

neda_dela
سه شنبه 06 مهر 1389, 05:42 صبح
به جای این قسمت از query خود به زبان SQL:



create table archivst(code bigint NOT NULL primary key,id bigint NOT NULL,firstname nvarchar(50) NOT NULL,lastname nvarchar(50) NOT NULL)


از این استفاده کنید ببینید فرقی می کند:



if object_id( 'dbo.archivist' ) is null begin create table archivst(code bigint NOT NULL primary key,id bigint NOT NULL,firstname nvarchar(50) NOT NULL,lastname nvarchar(50) NOT NULL) end

بازم همون خطا رو میده:
که گویا این تیبل موجوده البته وقتی که برای بار اول امتحان می کنم درست جواب میده برای بار دوم خطا میده

mahdi87_gh
چهارشنبه 14 مهر 1389, 23:16 عصر
دوست عزیز از کد زیر استفاده کن. البته اسامی و تعریف جدول رو عوض کن
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Anbar]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE [dbo].[Anbar](
[acode] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[kalaid] [nchar](3) NOT NULL,
[kharid] [decimal](18, 0) NOT NULL,
[mojodi] [int] NULL,
CONSTRAINT [PK_Anbar] PRIMARY KEY CLUSTERED
(
[kalaid] ASC,
[kharid] ASC
) ON [PRIMARY]
) ON [PRIMARY]
END