sql - IDENTITY_INSERT বন্ধ করার সময় টেবিলে 'টেবিলের' পরিচয় কলামের জন্য স্পষ্ট মান সন্নিবেশ করা যাবে না




sql-server sybase (9)

নিম্নলিখিত স্ক্রিপ্টটি চালানোর সময় আমার নীচের ত্রুটি রয়েছে। কি ত্রুটি, এবং এটি সমাধান করা যাবে কিভাবে?

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

ত্রুটি:

সার্ভার: বার্তা 544, স্তর 16, রাজ্য 1, লাইন 1

IDENTITY_INSERT বন্ধ করার সময় টেবিলে 'টেবিলের' পরিচয় কলামের জন্য স্পষ্ট মান সন্নিবেশ করা যাবে না।


কেবল যদি আপনি SQL সার্ভারে এই ত্রুটিটি পান তবে এই প্রশ্নটি চালান-

SET IDENTITY_INSERT tableName ON

উদাহরণস্বরূপ, যদি টেবিল নামটি শিক্ষার্থী হয় তবে এই SET IDENTITY_INSERT student ON মত জিজ্ঞাসা করুন

আপনি যদি আপনার ওয়েব অ্যাপ্লিকেশনটিতে এই ত্রুটিটি পান অথবা আপনি সত্তা ফ্রেমওয়ার্ক ব্যবহার করেন তবে প্রথমে এই সার্ভারটি SQL সার্ভারে চালান এবং আপনার সত্তা মডেল ( .edmx file ) আপডেট করুন এবং আপনার প্রকল্পটি তৈরি করুন এবং এই ত্রুটিটি সমাধান করা হবে


"সন্নিবেশ সারণি" এর জন্য কী ব্যবহার করা হয় তা আমি নিশ্চিত নই, তবে যদি আপনি কিছু মান সন্নিবেশ করার চেষ্টা করছেন তবে চেষ্টা করুন:

Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);

আমি একই ত্রুটি বার্তা আসা পর্যন্ত, কিন্তু আমি মনে করি এই কাজ করা উচিত। এটি একটি প্রাথমিক কী যতক্ষণ না আইডি স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়-বৃদ্ধি হবে।


অপারেশন আইডিতে মান লাগবে না কারণ এটি স্বয়ংক্রিয়ভাবে তৈরি হবে। এটা চেষ্টা কর:

Insert table(OpDescription,FilterID) values ('Hierachy Update',1)

আপনার প্রশ্নের মধ্যে পূর্বনির্ধারিত অপারেশনআইড আছে যা এটি স্বয়ংক্রিয়ভাবে বৃদ্ধি হওয়া উচিত নয়

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

তাই আপনার প্রশ্নের হবে

Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)

আপনি কেবলমাত্র এই বিবৃতিটি ব্যবহার করতে পারেন উদাহরণস্বরূপ, যদি আপনার টেবিলের নাম স্কুল হয় । সন্নিবেশের আগে নিশ্চিত করুন পরিচয়_িন্সার্টটি চালু আছে এবং সন্নিবেশ অনুসন্ধানের পরে পরিচয়_বিশেষ বন্ধ করুন

SET IDENTITY_INSERT School ON
/*
  insert query
  enter code here
*/
SET IDENTITY_INSERT School OFF

আপনি যদি আপনার SQL সার্ভার আপডেট করার জন্য তরল পদার্থ ব্যবহার করেন তবে আপনি সম্ভবত একটি স্বয়ংক্রিয় ইনক্রমেন্ট ক্ষেত্রের মধ্যে রেকর্ড কী সন্নিবেশ করার চেষ্টা করছেন। সন্নিবেশ থেকে কলাম অপসারণ করে, আপনার স্ক্রিপ্ট চালানো উচিত।

<changeSet id="CREATE_GROUP_TABLE" >
    <createTable tableName="GROUP_D">
        <column name="GROUP_ID" type="INTEGER" autoIncrement="true">
            <constraints primaryKey="true"/>
        </column>
    </createTable>
</changeSet>

<changeSet id="INSERT_UNKNOWN_GROUP" >
    <insert tableName="GROUP_D">    

        <column name="GROUP_ID" valueNumeric="-1"/>
 ...
    </insert>
</changeSet>

ওয়েল, আমি আমার বেশ সহজ সমাধান করেছি, আপনার প্রাথমিক কী একই সাথে আপনার ক্লাসগুলির সাথে একই নাম রয়েছে তা যাচাই করুন যেখানে আপনার প্রাথমিক কীটি 'আইডি' যুক্ত আছে বা প্রাথমিক কীগুলিতে [কী] উল্লেখ করুন যা কীভাবে সম্পর্কিত নয় ক্লাস নামকরণ করা হয়।


কোনও ত্রুটি ছাড়াই মূলত INSERT রেকর্ডগুলিতে 2 টি ভিন্ন উপায় রয়েছে:

1) যখন IDENTITY_INSERT বন্ধ করা হয়। প্রাথমিক কী "আইডি" উপস্থিত হতে হবে না

2) যখন IDENTITY_INSERT চালু হয়। প্রাথমিক কী "আইডি" অবশ্যই উপস্থিত হতে হবে

একটি আদর্শ প্রাইমারী কী দিয়ে তৈরি একই টেবিল থেকে নিম্নলিখিত উদাহরণ অনুসারে:

CREATE TABLE [dbo].[Persons] (    
    ID INT IDENTITY(1,1) PRIMARY KEY,
    LastName VARCHAR(40) NOT NULL,
    FirstName VARCHAR(40)
);

1) প্রথম উদাহরণে, IDENTITY_INSERT বন্ধ থাকলে ত্রুটি ছাড়াই আপনি টেবিলে নতুন রেকর্ড সন্নিবেশ করতে পারেন। প্রাথমিক কী "আইডি" বিবৃতিতে "অন্তর্নিহিত" থেকে উপস্থিত হতে হবে না এবং একটি অনন্য আইডি মান স্বয়ংক্রিয়ভাবে যোগ করা হবে:। আইডি যদি এই ক্ষেত্রে INSERT থেকে উপস্থিত থাকে তবে আপনি ত্রুটিটি পাবেন "টেবিলের কলাম সনাক্ত করার জন্য স্পষ্ট মান সন্নিবেশ করা যাবে না ..."

SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE'); 
INSERT INTO Persons (FirstName,LastName) 
VALUES ('JOE','BROWN');

টেবিল আউটপুট [dbo]। [ব্যক্তি] হবে:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE

2) দ্বিতীয় উদাহরণে, IDENTITY_INSERT চালু থাকলে ত্রুটি ছাড়াই আপনি টেবিলে নতুন রেকর্ড সন্নিবেশ করতে পারেন। প্রাইমারী কী "আইডি" অবশ্যই "ইনসার্ট ইন" বিবৃতি থেকে উপস্থাপিত হওয়া উচিত যতক্ষণ আইডি মান ইতিমধ্যে বিদ্যমান না থাকে : যদি ID এই ক্ষেত্রে INSERT থেকে উপস্থিত না হয় তবে আপনাকে ত্রুটিটি "ত্রুটিযুক্ত মূল্য অবশ্যই হতে হবে পরিচয় কলাম টেবিলের জন্য নির্দিষ্ট ... "

SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE'); 
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK'); 

টেবিল আউটপুট [dbo]। [ব্যক্তি] হবে:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE
3     BLACK      JACK
5     WHITE      JOHN

সেই সারণীর জন্য আপনার সত্তাতে, কলামের উপরে DatabaseGenerated বৈশিষ্ট্য যুক্ত করুন যার জন্য পরিচয় সন্নিবেশ সেট করা আছে:

উদাহরণ:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }






sybase