ورود

View Full Version : نحوه تغییر خصوصیت یک در بان SQl



Laia2005
یک شنبه 23 بهمن 1384, 09:30 صبح
سلام من می خواهم خصوصیت یک فیلد جدول بانک اطلاعاتی SQl ام را تغییر بدهم چه جوری ؟

reza_rad
یک شنبه 23 بهمن 1384, 09:46 صبح
از alter استفاده کنید:

alter table table_name
modify column_name datatype [null | not null]
[null | not null]
[, column_name...]

Laia2005
یک شنبه 23 بهمن 1384, 09:58 صبح
الان من می خواهم خاصیت Identity یک فیلد به طور مثال ID را از Yes به No تغییر بدهم
چه بنویسم ؟

سید مسعود موحد
یک شنبه 23 بهمن 1384, 14:34 عصر
از توی خود Enterprice Manager هم میتوانید تغییر دهید و بصورت هم زمان در Profiler کدش را ببینید خود SQL Server امکانات خیلی خوبی برای پیدا نمودن کد کارهایش درProfiler در اختیارتون قرار میدهد.

Laia2005
یک شنبه 23 بهمن 1384, 16:22 عصر
از توی خود Enterprice Manager هم میتوانید تغییر دهید و بصورت هم زمان در Profiler کدش را ببینید خود SQL Server امکانات خیلی خوبی برای پیدا نمودن کد کارهایش درProfiler در اختیارتون قرار میدهد.

من می خواهم از طریق کد این کار را انجام بدهم

سید مسعود موحد
یک شنبه 23 بهمن 1384, 16:31 عصر
خوب لعیا خانوم کدش را از Profiler بردارین یعنی یکبار اینکارو توی Enterprise Manager‌ انجام بدین و کدش را از Profiler‌ بردارین

Laia2005
یک شنبه 23 بهمن 1384, 16:35 عصر
این پروفایلش کجاست ؟

سید مسعود موحد
یک شنبه 23 بهمن 1384, 17:28 عصر
اینجا نگاه بکنید

Laia2005
یک شنبه 23 بهمن 1384, 17:35 عصر
بهتره نیست کد مربوطه را بنویسید اینجا
الان من می خواهم خاصیت Identity یک فیلد به طور مثال ID را از Yes به No تغییر بدهم
چه بنویسم ؟

سید مسعود موحد
دوشنبه 24 بهمن 1384, 08:44 صبح
اینم کدش اگر گفتم که خودتون برید و نگاه کنید برای این بود که با امکاناتش آشنا بشید







BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_Table1
(
F1 int NOT NULL,
F2 varchar(50) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.Table1)
EXEC('INSERT INTO dbo.Tmp_Table1 (F1, F2)
SELECT F1, F2 FROM dbo.Table1 (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.Table1
GO
EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT'
GO
COMMIT

Laia2005
دوشنبه 24 بهمن 1384, 11:41 صبح
اینم کدش اگر گفتم که خودتون برید و نگاه کنید برای این بود که با امکاناتش آشنا بشید







BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_Table1
(
F1 int NOT NULL,
F2 varchar(50) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.Table1)
EXEC('INSERT INTO dbo.Tmp_Table1 (F1, F2)
SELECT F1, F2 FROM dbo.Table1 (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.Table1
GO
EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT'
GO
COMMIT




برای عوض کردن یک خصوصیت باید این همه کد نوشت

سید مسعود موحد
دوشنبه 24 بهمن 1384, 11:54 صبح
دقیقا مراحل کارو میدونی چی است همون طور که از کدها معلوم است باید یک Tep_Table بدون فیلد کانتر بسازی اطلاعات جدولتو توی این جدول Temp ذخیره کنی بعد Table رو حذف کنی بعد Temp_Table‌رو به نام Table قبلیت تغییر نام بدی

Laia2005
دوشنبه 24 بهمن 1384, 12:53 عصر
دقیقا مراحل کارو میدونی چی است همون طور که از کدها معلوم است باید یک Tep_Table بدون فیلد کانتر بسازی اطلاعات جدولتو توی این جدول Temp ذخیره کنی بعد Table رو حذف کنی بعد Temp_Table‌رو به نام Table قبلیت تغییر نام بدی

دوست من ، من فقط می خواهم یک فیلد را خصوصیتش را عوض کنم

بزار روش آسون تر بگم

من می خواهم هنگام ایجاد جدول که با AdoQ می سازم یک فیلدم AutoNumber باشه همین !

Laia2005
دوشنبه 24 بهمن 1384, 22:01 عصر
بالخره توانستم این کار را کنم اما!

هدف من تغییر خصوصیت فیلد بود ؟

سید مسعود موحد
سه شنبه 25 بهمن 1384, 08:47 صبح
الان من می خواهم خاصیت Identity یک فیلد به طور مثال ID را از Yes به No تغییر بدهم
چه بنویسم ؟

دوست عزیز
شما به سوالتون یک نگاهی بیندازید شما کاری را که خواسته بودید من کدش را گذاشتم

m-khorsandi
سه شنبه 25 بهمن 1384, 11:16 صبح
دو تا سئوال مختلف پرسیدید!
تغییر ویژگیهای فیلد و ایجاد جدول

برای ایجاد یک جدول :


create table t1
( c1 int identity,
c2 varchar(10)
)


برای تغییر ویژگیهای یک فیلد:
تا جایی که من میدونم ویژگی IDENTITY فیلد رو به همین سادگی نمیتونید غیر فعال کنید
روشی که آقای موحد نوشتند ، روشی هست که SQL Server استفاده میکند:

1- از روی جدول مورد نظر یک جدول دیگه ساخته میشه با این تفاوت که اون فیلد ویژگی IDENTITY رو نداره.
2- اطلاعات جدول اصلی به جدول کپی منتقل میشه.
3- جدول اصلی حذف رو حذف میکنه.
4- جدول کپی رو به جدول اصلی تغییر نام میده.

اینجوری میتونید ساده تر بنویسید:



1)
CREATE TABLE dbo.Tmp_t1
(
c1 int NOT NULL,
c2 char(100) NULL,
c3 varchar(500) NULL
) ON [PRIMARY]


2)
INSERT INTO dbo.Tmp_t1 (c1, c2, c3)
SELECT c1, c2, c3 FROM dbo.t1

3)
DROP TABLE dbo.t1

4)
EXECUTE sp_rename N'dbo.Tmp_t1', N't1', 'OBJECT'

Laia2005
سه شنبه 25 بهمن 1384, 12:18 عصر
دو تا سئوال مختلف پرسیدید!
تغییر ویژگیهای فیلد و ایجاد جدول

برای ایجاد یک جدول :


create table t1
( c1 int identity,
c2 varchar(10)
)


برای تغییر ویژگیهای یک فیلد:
تا جایی که من میدونم ویژگی IDENTITY فیلد رو به همین سادگی نمیتونید غیر فعال کنید
روشی که آقای موحد نوشتند ، روشی هست که SQL Server استفاده میکند:

1- از روی جدول مورد نظر یک جدول دیگه ساخته میشه با این تفاوت که اون فیلد ویژگی IDENTITY رو نداره.
2- اطلاعات جدول اصلی به جدول کپی منتقل میشه.
3- جدول اصلی حذف رو حذف میکنه.
4- جدول کپی رو به جدول اصلی تغییر نام میده.

اینجوری میتونید ساده تر بنویسید:



1)
CREATE TABLE dbo.Tmp_t1
(
c1 int NOT NULL,
c2 char(100) NULL,
c3 varchar(500) NULL
) ON [PRIMARY]


2)
INSERT INTO dbo.Tmp_t1 (c1, c2, c3)
SELECT c1, c2, c3 FROM dbo.t1

3)
DROP TABLE dbo.t1

4)
EXECUTE sp_rename N'dbo.Tmp_t1', N't1', 'OBJECT'


ممنون آقای خرسندی

میدانید چرا من این کار را می کنم
یکی از فیلدهای جدولم را AutoNumber کرده ام

کاربر بعد از این که چند تا رکورد ایجاد کرد به طور مثال آخرین رکورد فیلد Autonumber اش میشه 5

حالا اگر کاربر کل رکورد ها را Delete کنه سپس یک بار دیگر Add کنه فیلد AutoNumber مقدارش میشه 6

من می خواهم هر موقع رکوردی در جدول نبود از یک1 شروع کنه !

m-khorsandi
سه شنبه 25 بهمن 1384, 12:45 عصر
خوب ، برای اینکار دو راه دارید:
میتونید از دستور Truncate Table استفاده کنید که به صورت خودکار بعد از حذف تمام رکوردها
IDENTITY رو به اصطلاح صفر میکنه.
- به خاطر اینکه تمام جزئیات رو در Log File ثبت نمیکنه سرعت خوبی داره
- روی جدولی که با جدول دیگه ای رابطه داشته باشه کار نمیکنه

میتونید از Console Command زیر استفاده کنید که IDENTITY رو حتی با داشتن رکورد هم RESEED
میکنه :


DBCC CHECKIDENT (tablename, RESEED)

Laia2005
سه شنبه 25 بهمن 1384, 20:02 عصر
خوب ، برای اینکار دو راه دارید:
میتونید از دستور Truncate Table استفاده کنید که به صورت خودکار بعد از حذف تمام رکوردها
IDENTITY رو به اصطلاح صفر میکنه.
- به خاطر اینکه تمام جزئیات رو در Log File ثبت نمیکنه سرعت خوبی داره
- روی جدولی که با جدول دیگه ای رابطه داشته باشه کار نمیکنه

میتونید از Console Command زیر استفاده کنید که IDENTITY رو حتی با داشتن رکورد هم RESEED
میکنه :


DBCC CHECKIDENT (tablename, RESEED)


ممنون میرم تست میکنم

Laia2005
چهارشنبه 26 بهمن 1384, 10:59 صبح
آقای خرسندی آفرین به این اطلاعات

V60
شنبه 28 بهمن 1385, 21:16 عصر
سلام
اقاق خرسندی
این چیزی که برای ریست کردن نوشتید فقط توی اس کیو ال سرور جواب می ده و اکسس را شامل نمی شه؟ اخه پیغام می ده که create table درست تعریف نشده و پارامترهای خوبی نداره