আইডিএনটিটিআইপিএসআরটি বন্ধ রাখার সময় সারণী 'সারণীতে' পরিচয় কলামের জন্য সুস্পষ্ট মান সন্নিবেশ করতে পারে না


361

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

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

ত্রুটি:

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

আইডিএনটিটিআইপিএসআরটি বন্ধ রাখার সময় সারণী 'সারণীতে' পরিচয় কলামের জন্য স্পষ্ট মান valueোকানো যায় না।



2
@ হিমাংশু অহুজা এই প্রশ্নটি (1334012) 10 বছর পুরনো, আপনি যা যুক্ত করেছেন কেবলমাত্র 1. যদি কিছু হয় তবে নতুনটি একটি সদৃশ। তবে কাছাকাছি তাকাতে আপনি দেখতে পাবেন যে এগুলির মধ্যে পার্থক্য রয়েছে (নতুনটি আইডিএনটিআইটিএসএসআরটি অন হিসাবে নির্দিষ্ট করে)। আপনার পতাকা / মন্তব্য মুছুন।
জেসি

@ জেসি তা করবেন যেহেতু আমি মনে করি না আমি কখন এই পতাকাটি পোস্ট করেছি
হিমাংশু আহুজা

উত্তর:


467

আপনি এটির জন্য মানগুলি সন্নিবেশ করানো OperationIdহচ্ছে এটি একটি পরিচয় কলাম।

আপনি এই জাতীয় টেবিলে পরিচয় সন্নিবেশ চালু করতে পারেন যাতে আপনি নিজের পরিচয় মানগুলি নির্দিষ্ট করতে পারেন।

SET IDENTITY_INSERT Table1 ON

INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
            (OperationID,
             OpDescription,
             FilterID)
VALUES      (20,
             'Hierachy Update',
             1)

SET IDENTITY_INSERT Table1 OFF 

14
+1 টি ঠিক - স্পষ্ট টিপে করার অনুমতি বিকল্পটি চালু করুন , তারপর সন্নিবেশ, তারপর নামক বিকল্পটি চালু অফ আবার
marc_s

13
আপনি যদি সত্যই পরিচয় কলামে নিজের মানটি যুক্ত করতে চান তবে এটি আপনার উত্তর, তবে অন্যদিকে, কেউ theোকাতে নিজেই কলামটি বাড়ানোর জন্য সেট করেছে। সেক্ষেত্রে টেবিলটি পরবর্তী ফ্রি নম্বরটির উপর নজর রাখবে এবং আপনাকে নিজেরাই অপারেশনআইডি তৈরি করার দরকার হবে না। নতুন আইডি SELECT SCOPE_IDENTITY () দ্বারা আনা যায়।
হাকান উইনথার

15
বিপজ্জনক অনুশীলন, এটি কেন খারাপ ধারণা তা না জানিয়ে সতর্কতা ছাড়াই এটি ব্যবহার করার পরামর্শ দিবেন না। খুব খারাপ উত্তর।
এইচএলজিইএম

7
ভাল উত্তর, কিন্তু আপনি কি করছেন তা নিশ্চিত হয়ে নিন। আমার জন্য এটি এমন ডেটাবেস বীজ করা দরকারী যেখানে বিদেশী কীগুলি বিভিন্ন টেবিলের সাথে মিলে যায়
বার্টি

2
@ ইউলিসেস আলভেস: এই বিকল্পটি কেবলমাত্র একটি একক টেবিল ডাটাবেস-বিস্তৃত জন্য চালু করা যেতে পারে - সুতরাং আপনি যদি এটি একটি টেবিলের জন্য রেখে দেন তবে আপনি এটি অন্য টেবিলে কখনও ব্যবহার করতে পারবেন না। এছাড়াও: এটি এমন কোনও বিকল্প নয় যা ছেড়ে দেওয়া উচিত - ডিফল্টরূপে, আপনার এসকিউএল সার্ভারকে পরিচয় মানগুলি হ্যান্ডেল করা উচিত - এটি কেবলমাত্র নির্দিষ্ট ক্ষেত্রে একটি শেষ অবলম্বন ব্যবস্থা হিসাবে লক্ষ্যযুক্ত - এটি কোনও সাধারণ-উদ্দেশ্য বিকল্পটি ছেড়ে দেওয়া বা বন্ধ করা নয় not আপনার অবসর ...
marc_s

61

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

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

5
আপনি যদি স্বয়ংক্রিয়ভাবে
অপারেশনআইডি

46

যদি আপনি এসকিউএল সার্ভারে এই ত্রুটিটি পেয়ে থাকেন তবে এই ক্যোয়ারীটি চালান-

SET IDENTITY_INSERT tableName ON

এটি কেবলমাত্র ডাটাবেসের একক সারণীতে কাজ করছে যেমন টেবিলের নাম যদি শিক্ষার্থী হয় তবে কোয়েরিটি এর মতো দেখায় SET IDENTITY_INSERT student ON

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


এটি আমার এমভিসি ওয়েব অ্যাপ্লিকেশনে ইএফ এর ক্ষেত্রে ছিল এবং আমি সবেমাত্র .edmx থেকে মডেলটি মুছে ফেলেছিলাম এবং পুনরায় যুক্ত (ডাটাবেস থেকে রাইট ক্লিক আপডেট করুন মডেল) এবং প্রকল্পটি পরিষ্কার এবং পুনর্নির্মাণ করি যা আমার জন্য কাজ করেছিল। আপনাকে @ উমং পাটোয়ার ধন্যবাদ
খানাল

42

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

আপনি কেন একটি পরিচয় ক্ষেত্রে একটি মান রাখার চেষ্টা করছেন?


5
কীভাবে প্রভাবিত? এটি একটি সেশন স্তর বিকল্পটি টেবিলের সম্পত্তি নয়।
মার্টিন স্মিথ

5
আপনি সম্পর্ক বজায় রাখতে চান এমন দুটি ডাটাবেসের মধ্যে এক সময়ের ডেটা সিঙ্ক। উদাহরণস্বরূপ আমি এটির ব্যবহার করে আমার প্রোডাক্টের স্কিমাটি একটি ডাটাবেস থেকে অন্য ডাটাবেসে
টানতে

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

2
প্রশ্নটি "এটি কী এবং কীভাবে সমাধান করা যায় তা আপনি নির্দিষ্ট করতে পারেন?" আপনার উত্তরটি এমন একটি মন্তব্য যা সমস্যার উত্তর দেয়ার উপযুক্ত উত্তরের পরিবর্তে একটি সতর্কতা এবং অন্য প্রশ্ন উত্থাপন করে।
গুণমান অনুঘটক

হ্যাঁ প্রাথমিক কীতে মান প্রবেশ করান না।
doflamingo

22

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

1) আইডিএনটিটিএনপিএসআরটি বন্ধ থাকলে। প্রাথমিক কী "আইডি" থাকা উচিত নয়

2) যখন আইডিএনটিটিআইপিএসআরটি চালু হয়। প্রাথমিক কী "আইডি" থাকা উচিত

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

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

1) প্রথম উদাহরণে, পরিচয়পত্রের অফারটি চালু থাকলে আপনি কোনও ত্রুটি না পেয়ে টেবিলে নতুন রেকর্ড সন্নিবেশ করতে পারেন। প্রাথমিক কী "আইডি" বর্তমান হবে না "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');

টেবিলের আউটপুট [ডিবিও] [[ব্যক্তিরা] হবেন:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE

2) দ্বিতীয় উদাহরণে, পরিচয়পত্রের নম্বর চালু থাকলে আপনি কোনও ত্রুটি না পেয়ে টেবিলে নতুন রেকর্ড সন্নিবেশ করতে পারেন। প্রাথমিক কী "আইডি" অবধি "INSERT INTO" বিবৃতি থেকে উপস্থাপন করা উচিত যতক্ষণ না আইডি মানটি ইতিমধ্যে বিদ্যমান না থাকে : আইডি এই ক্ষেত্রে 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'); 

টেবিলের আউটপুট [ডিবিও] [[ব্যক্তিরা] হবেন:

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

2
ফ্ল্যাগটি কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য প্লাস ওয়ান। আমার দিন সুপারম্যানকে
জন

20

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

উদাহরণ:

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

ভাল, সত্য, তবে আমি সত্যিই EF :-) এর জন্য একটি উত্তর চেয়েছিলাম, তবুও, এটি ওপি-র পক্ষে উপযুক্ত নয় যারা কখনও কখনও ব্যবহার করেন নি, বা সম্ভবত মুখোমুখিও হয়েছেন, EF।
অস্পেক্স

যাই হোক না কেন, উত্তরটি ভুল is আমার সত্তা ইতিমধ্যে এর সাথে নির্দিষ্ট করা হয়েছে DatabaseGeneratedOption.Identityএবং আমি তবুও ত্রুটি পেয়েছি। এটি আমার নিজের দোষ, আমি আমার ওয়েব পৃষ্ঠায় একে অপরের থেকে আলাদা করার জন্য নতুন সারিগুলিতে সিউডো-আইডি রাখছি এবং আমি আশা করি insertযথেষ্ট হওয়ার আগে কেবল এগুলি বাতিল করে দেব ।
অস্পেক্স

13

আপনি কেবলমাত্র এই বিবৃতিটি উদাহরণস্বরূপ ব্যবহার করতে পারেন যদি আপনার টেবিলের নাম স্কুল হয় । সন্নিবেশ নিশ্চিত করুন identity_insert সেট করা হয় আগে চালু এবং সন্নিবেশ ক্যোয়ারী পালা identity_insert পর অফ

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

1
কমান্ডের ব্যাখ্যা অন্তর্ভুক্ত করতে আপনি নিজের উত্তরে কিছুটা প্রসারিত করতে পারেন, এটি কেন কাজ করে এবং এর কী প্রভাব ফেলে?
gareththegeek

@gareththegeek হ্যাঁ এটি পরিচয় কলামের জন্য আপনাকে এটি ডেটা inোকানোর জন্য এটি নিশ্চিত করতে হবে।

6

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

<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>

4

আপনার ক্যোয়ারীতে প্রাক-উল্লিখিত অপারেশনআইড রয়েছে যা এটি হওয়া উচিত নয় কারণ এটি স্বয়ংক্রিয় বর্ধিত

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

সুতরাং আপনার জিজ্ঞাসা হবে

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

3

অন্য পরিস্থিতিটি পরীক্ষা করে দেখা যায় যে প্রাথমিক কীটি আপনার ক্লাসগুলির সাথে একই নাম যেখানে কেবলমাত্র পার্থক্য হ'ল আপনার প্রাথমিক কীতে এটিতে একটি 'আইডি' যুক্ত রয়েছে বা প্রাথমিক কীগুলিতে [কী] নির্দিষ্ট করতে হবে যা সম্পর্কিত নয় বর্গ নামকরণ করা হয়।


2
  1. এটি তখন ঘটে যখন আপনার একটি (প্রাথমিক কী) কলাম থাকে যা এসকিউএলে সত্য পরিচয় হিসাবে সেট করা থাকে না এবং sertোকানোর সময় আপনি এর সুস্পষ্ট মানটি পাস করেন না। এটি প্রথম সারিটি নেবে, তারপরে আপনি দ্বিতীয় সারির সন্নিবেশ করতে সক্ষম হবেন না, ত্রুটি পপ আপ হবে। এই কোড এই লাইন যোগ করে সংশোধন করা যায় [DatabaseGenerated(DatabaseGeneratedOption.Identity)]আপনার PrimaryKey কলামে এবং নিশ্চিত একটি ডাটা টাইপ তার সেট করা int- এ । যদি কলামটি প্রাথমিক কী হয় এবং এসকিউএলে আইসিডেন্টিটি সত্য হিসাবে সেট করা থাকে তবে কোডের এই লাইনটির প্রয়োজন নেই[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  2. এসকিউএল-তে আপনার কাছে এমন একটি কলাম রয়েছে যা প্রাথমিক কী নয়, এসকিউএল-তে সত্য পরিচয় হিসাবে সেট করা থাকে এবং আপনার EF- এ আপনি কোডের এই লাইনটি যুক্ত করেননি [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

ধন্যবাদ এটিই ছিল iv
বিশব প্রেমলাল

2

টীকাটি ব্যবহার করা GeneratedValue(strategy = ...), অর্থাৎ সবচেয়ে ভাল সমাধান

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;

এটি বলে যে, এই কলামটি আইডেন্টিটি কৌশল ব্যবহার করে ডেটাবেস দ্বারা উত্পন্ন হয়েছে এবং আপনার যত্ন নেওয়ার প্রয়োজন নেই - ডাটাবেস এটি করবে।


1

সিক্যুয়ালাইজ-টাইপসক্রিপ্ট এনপিএম সহ কোনও এসকিএল-সার্ভার ব্যবহার করার সময় আপনার যদি সমস্যা হয় তবে @AutoIncrementআইডি কলামে যুক্ত করার বিষয়টি নিশ্চিত করুন :

  @PrimaryKey
  @AutoIncrement
  @Column
  id!: number;

0

এবং যদি আপনি সংযোগের জন্য ওরাকল এসকিউএল বিকাশকারী ব্যবহার করে থাকেন তবে / স্কোয়াডেভ যোগ করতে ভুলবেন না: stmt /

/ স্কেলডেভ: স্টেমিট / সেট পরিচয়_সামান্য সারণী চালু;


স্পষ্টতই এটি তেমন নয়, প্রশ্নের একটি "
স্কেল

0

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

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

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


0

আমি ডাটাবেসে যে কোনও কিছু যুক্ত করতে চাইলে প্রতিবারই একটি নতুন অবজেক্ট তৈরি করে এই সমস্যার সমাধান করেছি।


0

মনে রাখবেন আপনি যদি প্রতিটি লাইনটি বন্ধ করে দিচ্ছেন ;তবে SET IDENTITY_INSERT mytable ONকমান্ডটি নিম্নলিখিত লাইনগুলির জন্য ধারণ করবে না।

যেমন
একটি কোয়েরি

SET IDENTITY_INSERT mytable ON;
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole');

ত্রুটি দেয়
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.

তবে এর মতো একটি কোয়েরি কাজ করবে:

SET IDENTITY_INSERT mytable ON
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole')
SET IDENTITY_INSERT mytable OFF;

দেখে মনে হচ্ছে SET IDENTITY_INSERTকমান্ডটি কেবল একটি লেনদেনের জন্য রয়েছে এবং এটি ;কোনও লেনদেনের সমাপ্তি নির্দেশ করবে।


-1

সমস্যাটি যদি আপনি ইন্টারফেস ব্যবহার করেন এবং জেনেরিক উপায়ে সেভচেন্জগুলির পদ্ধতি প্রয়োগ করেন তবে নন-টাইপযুক্ত ডিবিসিন্টেক্সট বা ডিবিসেট ব্যবহার করে উত্থাপিত সমস্যাটি

এটি যদি আপনার ক্ষেত্রে হয় তবে আমি উদাহরণস্বরূপ দৃBC়ভাবে ডিবিসিঙ্কটেক্সকে টাইপ করার প্রস্তাব দিই

MyDBContext.MyEntity.Add(mynewObject)

তাহলে .Savechangesকাজ করবে


-1

আপনার .dbML ফাইলে টেবিলগুলি কেবল মুছুন এবং তাদের আবার টেনে আনুন। তারপরে পরিষ্কার সমাধান> পুনর্নির্মাণ সমাধান> সমাধান তৈরি করুন।

আমার জন্য কি কাজ করে।

আমি নিজের মতো করে টেবিলটি তৈরি করতে পারি নি, আমি ভিএস এবং এসএসএমএস ব্যবহার করছিলাম, আমি এএসপি.নেট সনাক্তকরণের জন্য এই লিঙ্কটি অনুসরণ করেছি: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-st সূত্র / যোগ-aspnet পরিচয়-টু-একটি খালি নয়-অথবা বিদ্যমান ওয়েব-ফর্ম প্রকল্পের

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.