PDA

View Full Version : چطوری میشه identity یک فیلد رو در کد نویسی off یا on کرد؟



combo_ci
یک شنبه 26 اسفند 1386, 12:47 عصر
چطوری میشه identity یک فیلد رو در کد نویسی off یا on کرد؟

> ALTER TABLE Foo
> ALTER COLUMN FooKey
> ADD CONSTRAINT IDENTITY(100,1)
تو اینترنت گشتم اینو پیدا کردم اما کار نمیکنه !

Kamyar.Kimiyabeigi
یک شنبه 26 اسفند 1386, 14:36 عصر
قبل از insert کد زیر رو بنویس


SET IDENTITY_INSERT tableName ON

و در آخر که کارتون تموم شد کد زیر رو بنویسید


SET IDENTITY_INSERT tableName OFF

combo_ci
یک شنبه 26 اسفند 1386, 14:49 عصر
نه عزیزم این کد کار نمیکنه ....امتحان کن

Elham_gh
یک شنبه 26 اسفند 1386, 15:22 عصر
On و Off کردن فیلد identity فقط برای Insert معنی می ده و دستوراتی که Kamyar.Kimiyabeigi نوشته کاملا درسته و کار می کنه.
مشکل شما چیه که می گید کار نمی کنه؟

combo_ci
شنبه 31 فروردین 1387, 20:28 عصر
وقتی این کد رو به کار میبرم این خطا رو میده

Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'temp' when IDENTITY_INSERT is set to OFF.

Kamyar.Kimiyabeigi
یک شنبه 01 اردیبهشت 1387, 08:27 صبح
میشه کدی که نوشتین و خطا داده رو اینجا بزارین؟

combo_ci
یک شنبه 01 اردیبهشت 1387, 11:14 صبح
من یه table به نام temp با فیلد Srl و Name درست کردم...فیلد srl دارای identity هست

حالا این کد رو که اجرا میکنم

SET IDENTITY_INSERT [temp] off

INSERT INTO [temp] ([Srl], [name])
VALUES(8, 'ali')

SET IDENTITY_INSERT [temp] on

خطای

Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'temp' when IDENTITY_INSERT is set to OFF.


رو میده ...یعنی من میخوام توی کد identity رو off کنم و insert رو انجام بدم ...بعدشم اون رو on کنم

ممنون میشم اگه کمکم کنین

combo_ci
یک شنبه 01 اردیبهشت 1387, 11:15 صبح
یادم رفت بگم که فیلد srl یک فیلد primery key هست

Kamyar.Kimiyabeigi
یک شنبه 01 اردیبهشت 1387, 12:08 عصر
دوست عزیز اگر پست شماره 2 را بدقت بخونین متوجه میشین که دستورات رو جابجا نوشتین اول باید on کنین بعد off کنین

combo_ci
یک شنبه 01 اردیبهشت 1387, 12:17 عصر
من identity رو از رو فیلد srl برداشتم و بعد این کد رو اجرا کردم


SET IDENTITY_INSERT [temp] on

INSERT INTO [temp] ([name])
VALUES('ali')

SET IDENTITY_INSERT [temp] off

یعنی با این کد خودش باید identity رو روی جدول اجرا کنه دیگه
اما باز این error رو داد


Server: Msg 8106, Level 16, State 1, Line 1
Table 'temp' does not have the identity property. Cannot perform SET operation.

البته من هر دو حالتش رو میخوام یعنی اگخ میشه راهنماییم کننین که در همون حالت که فیلد srl دارای identity هست چطوری اول off کنمش بعد on

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

Kamyar.Kimiyabeigi
یک شنبه 01 اردیبهشت 1387, 14:44 عصر
CREATE TABLE [dbo].[Table1] (
[C1] [int] IDENTITY (1, 1) NOT NULL,
[C2] [VARCHAR] )
GO

SET IDENTITY_INSERT [dbo].[Table1] ON

INSERT INTO [dbo].[Table1] (C1, C2) VALUES (2, 'T')

SET IDENTITY_INSERT [dbo].[Table1] OFF

AminSobati
دوشنبه 02 اردیبهشت 1387, 09:15 صبح
دوست عزیزم متاسفانه در SQL Server تغییر خاصیت Identity به کمک دستورات TSQL انجام پذیر نیست. حتی در صورت اعمال این تغییر از طریق محیطهای گرافیکی مثل SSMS یا EM، اقدام به ساخت مجدد اون فیلد میکنند

combo_ci
سه شنبه 03 اردیبهشت 1387, 10:48 صبح
البته با کدی کخ Kamyar.Kimiyabeigi عزیز گفتم مشکلم حل شد...

rezaei manesh
چهارشنبه 11 فروردین 1389, 12:10 عصر
دوست عزیزم متاسفانه در SQL Server تغییر خاصیت Identity به کمک دستورات TSQL انجام پذیر نیست. حتی در صورت اعمال این تغییر از طریق محیطهای گرافیکی مثل SSMS یا EM، اقدام به ساخت مجدد اون فیلد میکنند

سلام یعنی تو sql2005 هم نمیشه این کار رو کرد
من الان یک جدول دارم برای سال جدید نیاز دارم که کلیه اطلاعات سال قبل عیناً در سال جدید بیاد حتی خاصیت identity فیلد کلید من هم عوض نشه یعنی می گین نمیشه؟
من می خوام اول identity رو off کنم و رکورد ها رو انتقال بدم و بعد on کنم دوباره

Kamyar.Kimiyabeigi
چهارشنبه 11 فروردین 1389, 18:26 عصر
دوست عزيز با كدي كه تو پست 11 نوشتم مشكل شما حل ميشه تو همه ورژنها