এসকিউএল সার্ভার ২০০৮ ব্যবহার করে কীভাবে আইডেন্টিটিআইপিএসআরটি চালু এবং বন্ধ করবেন?


461

IDENTITY_INSERTঅফে সেট করা থাকলে আমি কেন একটি সন্নিবেশ করতে ত্রুটি পাচ্ছি ?

এসকিউএল সার্ভার ২০০৮-এ আমি কীভাবে এটি সঠিকভাবে চালু করব? এটি কি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে?

আমি এই ক্যোয়ারী চালিয়েছি:

SET IDENTITY_INSERT Database. dbo. Baskets ON

এরপরে কনসোলে আমি বার্তাটি পেয়েছি যা কমান্ড (গুলি) সফলভাবে সম্পন্ন করেছে। তবে আমি যখন অ্যাপ্লিকেশনটি চালাচ্ছি তখন এটি নীচে প্রদর্শিত ত্রুটিটি দেয়:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.

দয়া করে এই প্রশ্নটি প্রসারিত করুন যাতে আপনি কী করতে চাইছেন তা আমরা বুঝতে পারি। আপনি যখন এই ত্রুটির মুখোমুখি হন তখন আপনি কোন বিবৃতি চালাচ্ছেন এবং ত্রুটি বার্তার আসল পাঠটি কী?
ম্যাট গিবসন

আপনি অন্য প্রশ্ন জিজ্ঞাসা করলেও, আপনার এখানে একটি উত্তর গ্রহণ করা উচিত: আপনি যা চেয়েছিলেন আমরা তার উত্তর দিয়েছি ।
gbn

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

আমি এটি আমার এসকিউএল স্ক্রিপ্টযুক্ত ব্যাকআপে ব্যবহার করছি। পুনরুদ্ধারের সময় আমাকে আসল মান সহ একটি স্বয়ত্তিবদ্ধ টেবিলে ডেটা লোড করতে দিন। স্ক্রিপ্টযুক্ত ব্যাকআপ আমাকে এসকিউএল ডাটাবেস ডাউনগ্রেড করতে দেয়। স্ক্রিপ্টযুক্ত ব্যাকআপের ম্যানেজমেন্ট স্টুডিওর উপলব্ধি যদি আমি একটি পাঠ্য ক্ষেত্রে বাইনারি ডেটা সঞ্চয় করি তবে আনলোডযোগ্য স্ক্রিপ্ট তৈরি করে।
জেটেরো

উত্তর:


771

এমএসডিএন অনুসারে এসকিউএল মাধ্যমে

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT INTO sometableWithIdentity 
    (IdentityColumn, col2, col3, ...)
VALUES 
    (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

সম্পূর্ণ ত্রুটি বার্তা আপনাকে জানায় ঠিক কী ভুল ...

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


@ বিগিনার: আপনি তবুও ত্রুটি। আমরা কীভাবে জানতে পারি যে আপনি মান সন্নিবেশ করতে চান না ? আমাদের কেবল একটি ত্রুটি বার্তা রয়েছে
gbn

3
ত্রুটিটি আমার অ্যাপ্লিকেশন থেকে যখন আমি ডিবি করি। সেভচেনজেসগুলি ();
শিক্ষানবিস

5
না, কেবল পরিচয় কলামের জন্য একটি মান পাঠানো বন্ধ করুন। অথবা যদি আপনি কোনও মান পাঠাতে চান তবে আপনার অ্যাপ্লিকেশনটিতে এটি সেট করুন ..... তবে কেন পরিচয় সম্পত্তি সহ একটি কলাম কেন মান উত্পন্ন করতে সেট করবে? আমরা আপনার জন্য সিদ্ধান্ত নিতে পারি না
gbn

22
@ বেগনারার: ​​সেটিংসটি কেবলমাত্র বর্তমান অধিবেশনে প্রযোজ্য (এই প্রশ্নের জন্য কেউ যথেষ্ট উল্লেখ করেননি), যাতে অ্যাপ্লিকেশনটি এই জাতীয় সন্নিবেশ সম্পাদন করার জন্য এটি চালু করতে হবে (এবং সম্ভবত অবিলম্বে ঘুরিয়ে দেওয়া সেরা) এটি আবার বন্ধ হয় যখন এই জাতীয় সন্নিবেশগুলি সমাপ্ত হয়, যেমন জিবিএন শো)। আপনি কীভাবে পরিচয় কলামে কোনও মূল্য সন্নিবেশ করছিলেন তা অনুধাবন না করেই এটি পরিষ্কার নয়, তবে ইসমাইলের প্রস্তাবনা অনুসারে সুস্পষ্ট সন্নিবেশ কলামগুলি নির্দিষ্ট (?) নির্দিষ্ট না করা অবস্থায় এসকিউএল সার্ভারের পুরানো সংস্করণগুলি এটিকে সমস্ত কলামের সাথে অন্তর্ভুক্ত করবে।
রব পার্কার

2
@ রব, আমি মনে করি আপনার কাছে হ'ল পয়েন্ট অ্যাডন আমি ব্যক্তিগতভাবে যে কোনও কোডে কোড পর্যালোচনা ব্যর্থ করে যা কলামগুলি নির্দিষ্ট না করে সন্নিবেশ করে না। কোনও ত্রুটির জন্য নষ্ট হওয়া সময় ব্যতীত, এটি একটি ঝুঁকিপূর্ণ অনুশীলন এবং কলামের ডেটা সঠিকভাবে মেলে না তবে আপনি গুরুতর ডেটা অখণ্ডতার সমস্যাগুলি শেষ করতে পারেন।
এইচএলজিইএম

59

আমার একটি সমস্যা হয়েছিল যেখানে এটি আইডিএনটিটিআইপিএসআরটি চালু করার পরেও আমাকে এটি প্রবেশ করতে দেয়নি।

সমস্যাটি হ'ল আমি কলামের নামগুলি নির্দিষ্ট করেছি এবং কোনও কারণে এটি পছন্দ করে নি।

INSERT INTO tbl Values(vals)

সুতরাং মূলত টিবিএল (কলস) ভ্যালু (ভ্যালস) এর মধ্যে সম্পূর্ণ ইনসার্ট করুন


6
উত্তর ফলকে প্রশ্ন করবেন না।
ডুক

4
কলামের তালিকাটি নির্দিষ্ট করতে (টেবিলের উভয় কলাম,
মাসলো

36

আমদানি: আপনাকে অবশ্যই INSERTবিবৃতিতে কলাম লিখতে হবে

INSERT INTO TABLE
SELECT * FROM    

সঠিক নয়.

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

সঠিক


2
আপনাকে ধন্যবাদ, এটি খুব সহায়ক ছিল
জোসে রোমেরো

1
আপনার যদি উভয় টেবিলগুলিতে অভিন্ন কলাম থাকে তবে আপনি (ফিল্ড 1 ..) এর মতো নির্বাচনের কলামগুলিকে তালিকাবদ্ধ না করেই করতে পারেন .... টেবিলের মধ্যে sertোকান (ক্ষেত্র 1, ...) টেবিল থেকে * নির্বাচন করুন ... এবং যদি আপনার কাছে থাকে প্রথমে প্রবেশের জন্য পরিচয় ক্ষেত্রটি করুন ** সেট পরিচয়পত্রের নাম সারণি_নাম চালু করুন
ব্যবহারকারী 3590235

@ ব্যবহারকারী 3590235 এটি কলাম তালিকাটি অভিন্ন বলে মনে করা ঝুঁকিপূর্ণ ধারণা। ম্যানুয়াল ব্যবহারকারীর প্রশ্নের বাইরে, কখনও কখনও তা করবেন না, কারণ আমি গ্যারান্টি দিচ্ছি যে আপনি যখন কোনও দিন আপনার রেফারেন্স আপডেট না করে টেবিলের সংজ্ঞাটি পরিবর্তন করবেন তখন আপনি একদিন পিআরডি ভঙ্গ করবেন।
এলাসকানোটার

5

আমি জানি এটি একটি পুরানো থ্রেড তবে আমি এটিতে ঝাঁপিয়ে পড়েছি। যদি ব্যবহারকারী কোনও অন্য সেশন সেট আইডেন্টিটিআইপিএসআরটি চালু করার পরে আইডেন্টিটি কলামে সন্নিবেশগুলি চালানোর চেষ্টা করছেন, তবে তিনি উপরের ত্রুটিটি পেতে বাধ্য bound

সনাক্তকরণ সন্নিবেশ মান নির্ধারণ এবং পরবর্তী সন্নিবেশ ডিএমএল কমান্ড একই সেশনে চালিত হতে হবে।

এখানে @ ব্যাগনার আলাদাভাবে পরিচয় সন্নিবেশ চালু করে তার অ্যাপ্লিকেশন থেকে সন্নিবেশগুলি চালাচ্ছিলেন। সে কারণেই তিনি নীচের ত্রুটিটি পেয়েছেন:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.

0

এটি সম্ভবত যখন আপনার প্রাথমিক কী ক্ষেত্র থাকে এবং আপনি নকল করে এমন কোনও মান সন্নিবেশ করছেন বা আপনার INSERT_IDENTITY পতাকাটি সেট আছে


0

SET IDENTITY_INSERT Database.dbo.Baskets ON;প্রতিটি এসকিউএল INSERTপ্রেরণকারী ব্যাচের আগে এটি রাখা প্রয়োজন বলে মনে হচ্ছে ।

আপনি শুরুতে INSERT ... VALUES ...এক SET IDENTITY_INSERT ... ON;স্ট্রিং দিয়ে শুরু বেশ কয়েকটি কমান্ড প্রেরণ করতে পারেন । এর মধ্যে কোনও ব্যাচ বিভাজক রাখবেন না।

কেন জানি না কেন SET IDENTITY_INSERT ... ONপ্রেরক ব্লকের পরে কাজ করা বন্ধ হয়ে যায় (যেমন: .ExecuteNonQuery()সি # তে)। SET IDENTITY_INSERT ... ON;পরবর্তী এসকিউএল কমান্ড স্ট্রিংয়ের শুরুতে আমাকে আবার রাখতে হয়েছিল।


: হয়তো এই আপনার প্রশ্নের উত্তর stackoverflow.com/questions/5791941/...
Demetris Leptos

-1

পরিচয় সন্নিবেশ সেট করার পরে আপনাকে 'go' কমান্ডটি যুক্ত করতে হবে। উদাহরণ:

SET IDENTITY_INSERT sometableWithIdentity ON
go

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF
go

5
এই প্রশ্নটি চার বছরের পুরানো এবং এর একটি স্বীকৃত উত্তর রয়েছে। আপনার উত্তর গৃহীত উত্তর সদৃশ
ঘোস্ট

13
ঠিক আছে, যথাযথ সদৃশ নয় - তিনি "গো" আদেশগুলি অন্তর্ভুক্ত করেছিলেন ...;)
রোস্টবিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.