ত্রুটিগুলি: "INSERT EXEC বিবৃতি নেস্ট করা যায় না।" এবং "ইনসার্ট-এক্সেক স্টেটমেন্টের মধ্যে রোলব্যাক স্টেটমেন্ট ব্যবহার করতে পারবেন না।" কীভাবে সমাধান করবেন?


100

আমি তিনটি সংরক্ষিত পদ্ধতি আছে Sp1, Sp2এবং Sp3

প্রথমটি ( Sp1) দ্বিতীয়টি কার্যকর করবে ( Sp2) এবং এর মধ্যে ফিরে আসা ডেটা সংরক্ষণ @tempTB1করবে এবং দ্বিতীয়টি তৃতীয়টি কার্যকর করবে ( Sp3) এবং এতে ডেটা সংরক্ষণ করবে @tempTB2

যদি আমি Sp2এটি কার্যকর করি তবে এটি কাজ করবে এবং এটি আমার সমস্ত ডেটা আমাকে ফিরিয়ে দেবে Sp3, তবে সমস্যাটি হয় Sp1, আমি যখন এটি সম্পাদন করি তখন এটি এই ত্রুটিটি প্রদর্শন করবে:

INSERT EXEC বিবৃতি নেস্ট করা যাবে না

আমি স্থানটি পরিবর্তন করার চেষ্টা করেছি execute Sp2এবং এটি আমাকে আরও একটি ত্রুটি প্রদর্শন করেছে:

ইনসার্ট-এক্সেক স্টেটমেন্টের মধ্যে রোলব্যাক স্টেটমেন্ট ব্যবহার করতে পারবেন না।

উত্তর:


102

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

উদাহরণস্বরূপ চারপাশের কাজটি Sp3 কে একটি সারণী-মূল্যবান ফাংশনে রূপান্তর করতে পারে।


4
ভাঙা লিঙ্ক বা প্রতিক্রিয়াবিহীন সাইট।
সৌরভ

6
এটির অনুমতি না দেওয়ার কারিগরি কারণটি কি আপনার কোনও ধারণা আছে? আমি এটিতে কোনও তথ্য পাই না।
jtate

4
দুর্ভাগ্যক্রমে এটি প্রায়শই একটি বিকল্প নয়। অনেক প্রকারের গুরুত্বপূর্ণ তথ্য কেবল সিস্টেমের সঞ্চিত প্রক্রিয়াগুলি থেকে নির্ভরযোগ্যভাবে উপলভ্য হয় (কারণ কিছু ক্ষেত্রে সংশ্লিষ্ট পরিচালিত দৃশ্যে অবিশ্বাস্য / অপ্রচলিত ডেটা থাকে; উদাহরণটি ফেরত দেওয়া তথ্য )। sp_help_jobactivity
GSerg

21

এসকিউএল সার্ভারে এটি করার একমাত্র "সহজ" উপায় যা কোনও বিশাল দৈত্য সংশ্লেষিত ক্রিয়াকলাপ বা সম্পাদিত এসকিএল স্ট্রিং কল ব্যতীত উভয়ই ভয়ানক সমাধান:

  1. একটি টেম্প টেবিল তৈরি করুন
  2. এটিতে আপনার সঞ্চিত পদ্ধতি ডেটা খুলুন row

উদাহরণ:

INSERT INTO #YOUR_TEMP_TABLE
SELECT * FROM OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','set fmtonly off EXEC [ServerName].dbo.[StoredProcedureName] 1,2,3')

দ্রষ্টব্য : আপনার অবশ্যই 'সেট এফএমটোনলি অফ' ব্যবহার করা উচিত, এবং আপনি ওপেনরোসেট কলের অভ্যন্তরে ডায়ামিক স্কয়ার যোগ করতে পারবেন না, হয় আপনার সঞ্চিত পদ্ধতির পরামিতিগুলির স্ট্রিং বা টেবিলের নামের জন্য। এটি আপনাকে কেন টেবিল ভেরিয়েবলের চেয়ে একটি টেম্প টেবিল ব্যবহার করতে হবে, এটি আরও ভাল হত কারণ এটি বেশিরভাগ ক্ষেত্রে টেম্প টেবিলটি সম্পাদন করে।


এটি সেট করে FMTONLY অফ করা আবশ্যক নয়। আপনি কেবলমাত্র একটি আইএফ (1 = 0) যুক্ত করতে পারেন যা প্রক্রিয়াটি সাধারণত ফিরিয়ে দেয় একই ডাটা টাইপের সাথে একটি খালি টেবিল দেয়।
গিলারমো গুটিরিজ

4
টেম্প টেবিল এবং সারণী ভেরিয়েবলগুলি তাদের ডেটা আলাদাভাবে সঞ্চয় করে। সুতরাং বড় ডেটা সেটগুলির জন্য টেম্প টেবিলগুলি ব্যবহার করা প্রায় সর্বদা ভাল। এখানে এটিতে
gh9

@ gh9 হ্যাঁ, তবে যাইহোক বড় ফলাফলগুলির সেটগুলির জন্য এটি একটি ভয়ঙ্কর ধারণা। টেম্প ডাটাবেসে একটি প্রকৃত টেবিলের পরিসংখ্যান এবং ব্যবহার উল্লেখযোগ্য ওভারহেডের কারণ হতে পারে। আমার একটি পদ্ধতি রয়েছে যা বর্তমান মানগুলির 1 সারি (বেশ কয়েকটি সারণী জিজ্ঞাসা করা) এবং একটি পদ্ধতি যা একটি সারণী ভেরিয়েবলের মধ্যে সঞ্চয় করে এবং একই ফর্ম্যাটটির সাথে অন্য টেবিলে মানগুলির সাথে তুলনা করে returns একটি টেম্প টেবিল থেকে একটি টেবিলের ভেরিয়েবলে পরিবর্তন গড়ে গড় সময়কে 8 মিমি থেকে 2 এমএসে বাড়িয়ে তোলে, এটি যখন গুরুত্বপূর্ণ হয় যখন এটি সারা দিন কয়েক সেকেন্ড এবং রাত্রে প্রক্রিয়াতে 100,000 বার বলা হয়।
জেসন গোয়েমাট

4
আপনি কী চান যে পরিসংখ্যানগুলি একটি টেবিল ভেরিয়েবলের উপর বজায় রাখা হয়? পুরো বিষয়টিটি র‌্যামে একটি অস্থায়ী টেবিল তৈরি করা যা কোয়েরি শেষ হওয়ার পরে ধ্বংস হয়ে যাবে। সংজ্ঞা অনুসারে এ জাতীয় টেবিলে তৈরি হওয়া কোনও পরিসংখ্যান কখনই ব্যবহার করা হবে না। সাধারণত, কোনও টেবিলের ভেরিয়েবলের ডেটা র‌্যামে থাকে যেখানেই সম্ভব সেখানে তাদের ডেটা এসকিউএল সার্ভারের জন্য উপলব্ধ র‌্যামের পরিমাণের চেয়ে ছোট যেখানে কোনও দৃশ্যে টেম্প টেবিলের চেয়ে দ্রুততর করে তোলে (যা আমাদের এসকিউএল এর জন্য 100 গিগাবাইট + মেমরি পুলের এই দিনগুলিতে) সার্ভারগুলি, প্রায় সর্বদা)
জিওফ গ্রিসওয়াল্ড

যদিও এটি বর্ধিত সঞ্চিত প্রক্রিয়াগুলির জন্য কাজ করে না। ত্রুটিটি হ'ল মেটাডেটা নির্ধারণ করা যায়নি কারণ বিবৃতি 'এক্সিকিউটি <প্রসেসিউরনাম> @ রিটাল আউটপুট' পদ্ধতিতে ... 'একটি বর্ধিত সঞ্চিত প্রক্রিয়াটি আহ্বান করে
GSerg

12

ঠিক আছে, এখানে জিমহার্ক দ্বারা উত্সাহিত করা পুরানো একক হ্যাশ টেবিল পদ্ধতির উদাহরণ:

CREATE PROCEDURE SP3 as

BEGIN

    SELECT 1, 'Data1'
    UNION ALL
    SELECT 2, 'Data2'

END
go


CREATE PROCEDURE SP2 as

BEGIN

    if exists (select  * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1'))
        INSERT INTO #tmp1
        EXEC SP3
    else
        EXEC SP3

END
go

CREATE PROCEDURE SP1 as

BEGIN

    EXEC SP2

END
GO


/*
--I want some data back from SP3

-- Just run the SP1

EXEC SP1
*/


/*
--I want some data back from SP3 into a table to do something useful
--Try run this - get an error - can't nest Execs

if exists (select  * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1'))
    DROP TABLE #tmp1

CREATE TABLE #tmp1 (ID INT, Data VARCHAR(20))

INSERT INTO #tmp1
EXEC SP1


*/

/*
--I want some data back from SP3 into a table to do something useful
--However, if we run this single hash temp table it is in scope anyway so
--no need for the exec insert

if exists (select  * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1'))
    DROP TABLE #tmp1

CREATE TABLE #tmp1 (ID INT, Data VARCHAR(20))

EXEC SP1

SELECT * FROM #tmp1

*/

আমি এই কাজের চারপাশের পাশাপাশি ব্যবহার। ধারনাটির জন্য তোমাকে ধন্যবাদ!
এসকিউএল_গুই

কল্পনাপ্রসূত কাজ। এটি আমাকে টেম্প টেবিল স্কোপিং সম্পর্কে আরও শিখতে সহায়তা করেছে। ইস, আমি বুঝতে পারিনি যে এটির বাইরে ঘোষিত হলে আপনি একটি ডায়েন্সক্ল স্ট্রিংয়ে একটি টেম্প টেবিল ব্যবহার করতে পারেন। অনুরূপ ধারণা এখানে। অনেক ধন্যবাদ.
jbd

10

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


4
আমি এই উত্তরটি পছন্দ করি এবং আমি বাজি দেব যদি আপনি সরবরাহ এবং উদাহরণ প্রদান করেন তবে আপনি আরও বেশি ভোট পেয়ে যাবেন।
জিমহার্ক

আমি বছরের পর বছর ধরে এটি করে আসছি। এসকিউএল অ্যাজুরেতে এখনও এটি প্রয়োজনীয়?
নিক অ্যালান

হ্যাঁ, আজুর এসকিউএল সার্ভারের মতো ঠিক একই ইঞ্জিনটি ব্যবহার করে কেবল আসল পার্থক্য হ'ল স্টোরেজ এবং সিপিইউ
জিওফ গ্রিসওয়াল্ড

6

এই কৌশলটি আমার পক্ষে কাজ করে।

রিমোট সার্ভারে আপনার এই সমস্যা নেই কারণ দূরবর্তী সার্ভারে সর্বশেষ সন্নিবেশ কমান্ডটি পূর্ববর্তী কমান্ডটি কার্যকর করার জন্য অপেক্ষা করে। এটি একই সার্ভারের ক্ষেত্রে নয়।

কর্মক্ষেত্রের জন্য সেই পরিস্থিতিতে লাভ করুন।

যদি আপনার লিঙ্কযুক্ত সার্ভার তৈরি করার সঠিক অনুমতি থাকে তবে এটি করুন। লিঙ্কযুক্ত সার্ভার হিসাবে একই সার্ভার তৈরি করুন।

  • এসএসএমএস-এ, আপনার সার্ভারে লগ ইন করুন
  • "সার্ভার অবজেক্ট" এ যান
  • "লিঙ্কযুক্ত সার্ভারস" এ ডান ক্লিক করুন, তারপরে "নতুন লিঙ্কযুক্ত সার্ভার"
  • কথোপকথনে, আপনার লিঙ্কযুক্ত সার্ভারের কোনও নাম দিন: উদাহরণস্বরূপ: THISSERVER
  • সার্ভারের ধরণটি "অন্যান্য ডেটা উত্স"
  • সরবরাহকারী: এসকিউএল সার্ভারের জন্য মাইক্রোসফ্ট ওএলই ডিবি সরবরাহকারী
  • ডেটা উত্স: আপনার আইপি, এটি কেবল একটি বিন্দু (।) হতে পারে, কারণ এটি লোকালহোস্ট
  • "সুরক্ষা" ট্যাবে যান এবং তৃতীয়টি "লগইনের বর্তমান সুরক্ষা প্রসঙ্গটি ব্যবহার করে তৈরি করুন" চয়ন করুন
  • আপনি চাইলে সার্ভার অপশনগুলি (তৃতীয় ট্যাব) সম্পাদনা করতে পারেন
  • ঠিক আছে চাপুন, আপনার লিঙ্কযুক্ত সার্ভার তৈরি হয়েছে

এখন এসপি 1 এ আপনার এসকিএল কমান্ডটি

insert into @myTempTable
exec THISSERVER.MY_DATABASE_NAME.MY_SCHEMA.SP2

বিশ্বাস করুন, এসপি 2-তে আপনার ডায়নামিক .োকানো এমনকি এটি কাজ করে


4

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


তবে একটি অসুবিধা ব্যতিক্রম হ্যান্ডলিংয়ের সাথে সমস্যাটি যদি ফাংশনটি জটিল হয়, তাই না?
মুফ্লিক্স

3

একটি সঞ্চিত প্রকের ফলাফলগুলি একটি টেম্প টেবিলের মধ্যে আমদানির চেষ্টা করার সময় আমি এই সমস্যার মুখোমুখি হয়েছিলাম এবং স্টোরকড প্রক তার নিজস্ব ক্রিয়াকলাপের অংশ হিসাবে একটি টেম্প টেবিলের মধ্যে .োকানো হয়েছিল। এসকিউএল সার্ভার একই সমস্যা একই সময়ে একই প্রক্রিয়াটিকে দুটি ভিন্ন টেম্প টেবিলগুলিতে লেখার অনুমতি দেয় না।

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

আমি খুঁজে পাওয়া একটি সহজ কাজ হ'ল আমার সঞ্চিত পদ্ধতিতে অস্থায়ী টেবিলটি একটি টেবিলের ভেরিয়েবলে পরিবর্তন করা। এটি কোনও টেম্প টেবিলের সাথে ঠিক একইভাবে কাজ করে তবে আমার অন্য টেম্প টেবিল withোকানোর সাথে আর বিরোধ নেই।

শুধু মন্তব্যটি শিরোনাম আমি জানি যে আপনারা কয়েকজন লেখার কথা বলছেন, আমাকে টেবিল ভেরিয়েবলগুলি পারফরম্যান্স কিলার হিসাবে সতর্ক করে দিয়েছিলেন ... আমি আপনাকে কেবল এতটাই বলতে পারি যে ২০২০ সালে এটি লভ্যাংশ প্রদান করে টেবিল ভেরিয়েবলগুলি ভয় পাওয়ার জন্য না । যদি এটি 2008 ছিল এবং আমার ডেটাবেসটি 16 জিবি র‌্যাম সহ কোনও সার্ভারে হোস্ট করা হয়েছিল এবং 5400RPM এইচডিডি চালিয়ে যাচ্ছে তবে আমি আপনার সাথে একমত হতে পারি। তবে এটি ২০২০ এবং আমার প্রাথমিক স্টোরেজ এবং র‌্যামের কয়েকশ জিগ হিসাবে আমার এসএসডি অ্যারে রয়েছে । আমি আমার পুরো সংস্থার ডাটাবেসটিকে একটি টেবিল ভেরিয়েবলে লোড করতে পারি এবং এখনও প্রচুর পরিমাণে রেম ছাড়তে পারি।

সারণী ভেরিয়েবলগুলি মেনুতে ফিরে এসেছে!


1

দুই বা ততোধিক স্প্রোকে নকল কোড নিয়ে আমার একই সমস্যা এবং উদ্বেগ ছিল। আমি "মোড" এর জন্য অতিরিক্ত বৈশিষ্ট্য যুক্ত করে শেষ করেছি। এটি একটি স্প্রোকের মধ্যে প্রচলিত কোডের অস্তিত্বের অনুমতি দেয় এবং স্প্রোকের মোড নির্দেশিত প্রবাহ এবং ফলাফল সেটের ভিতরে।


1

স্ট্যাটিক টেবিল থেকে আউটপুট সংরক্ষণ সম্পর্কে কি? পছন্দ

-- SubProcedure: subProcedureName
---------------------------------
-- Save the value
DELETE lastValue_subProcedureName
INSERT INTO lastValue_subProcedureName (Value)
SELECT @Value
-- Return the value
SELECT @Value

-- Procedure
--------------------------------------------
-- get last value of subProcedureName
SELECT Value FROM lastValue_subProcedureName

এটি আদর্শ নয়, তবে এটি এত সহজ এবং আপনার সবকিছু পুনর্লিখনের প্রয়োজন নেই।

আপডেট : পূর্ববর্তী সমাধান সমান্তরাল ক্যোয়ারী (অ্যাসিঙ্ক এবং মাল্টিউসার অ্যাক্সেসিং) এর সাথে ভাল কাজ করে না তাই এখন টেম্প টেবিলগুলি ব্যবহার করে আইএএম

-- A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. 
-- The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. 
-- The table cannot be referenced by the process that called the stored procedure that created the table.
IF OBJECT_ID('tempdb..#lastValue_spGetData') IS NULL
CREATE TABLE #lastValue_spGetData (Value INT)

-- trigger stored procedure with special silent parameter
EXEC dbo.spGetData 1 --silent mode parameter

নেস্টেড spGetDataসঞ্চিত প্রক্রিয়া সামগ্রী

-- Save the output if temporary table exists.
IF OBJECT_ID('tempdb..#lastValue_spGetData') IS NOT NULL
BEGIN
    DELETE #lastValue_spGetData
    INSERT INTO #lastValue_spGetData(Value)
    SELECT Col1 FROM dbo.Table1
END

 -- stored procedure return
 IF @silentMode = 0
 SELECT Col1 FROM dbo.Table1

সাধারণত, আপনি টেবিলগুলির সাথে আপনার মতো কোনও এসপ্রোক অ্যাডহক তৈরি করতে পারবেন না। আপনার উদাহরণটি আরও রেফারেন্স সহ প্রসারিত করতে হবে, কারণ এই পদ্ধতির সত্যই সহজেই জানা বা গ্রহণযোগ্য নয়। এছাড়াও, এটি একটি লম্পডা এক্সপ্রেশনটিকে এসপোক্র এক্সিকিউশনের চেয়েও বেশি সাদৃশ্যযুক্ত, যা এএনএসআই-এসকিউএল ল্যাম্বদা এক্সপ্রেশন পদ্ধতির জন্য অনুমতি দেয় না।
গোল্ডবিশপ

এটি কাজ করে তবে আমি দেখতে পেলাম যে এটি সমান্তরাল ক্যোয়ারী (অ্যাসিঙ্ক এবং বহু ব্যবহারকারী অ্যাক্সেস) এর সাথে ভালভাবে কাজ করে না। অতএব এখন আইএম টেম্প টেবিল পদ্ধতির ব্যবহার করে। আমি আমার উত্তর আপডেট।
মুফ্লিক্স

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

0

অভ্যন্তরীণ এসপি থেকে একটি আউটপুট কার্সার পরিবর্তনশীল ঘোষণা করুন:

@c CURSOR VARYING OUTPUT

তারপরে আপনি যে সিলেক্ট করতে চান সেটিতে একটি কার্সার সি ঘোষণা করুন। তারপরে কার্সারটি খুলুন। তারপরে রেফারেন্সটি সেট করুন:

DECLARE c CURSOR LOCAL FAST_FORWARD READ_ONLY FOR 
SELECT ...
OPEN c
SET @c = c 

বন্ধ বা পুনরায় প্রত্যাখ্যান করবেন না।

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

exec sp_abc a,b,c,, @cOUT OUTPUT

অভ্যন্তরীণ এসপি একবার কার্যকর হলে আপনার @cOUTআনার জন্য প্রস্তুত। লুপ এবং তারপরে নিকটবর্তী এবং ডিএলোকট।


0

আপনি যদি অন্যান্য সম্পর্কিত প্রযুক্তি যেমন সি # ব্যবহার করতে সক্ষম হন তবে আমি ট্রানজেকশন প্যারামিটার সহ বিল্ট ইন এসকিউএল কমান্ডটি ব্যবহার করার পরামর্শ দিই।

var sqlCommand = new SqlCommand(commandText, null, transaction);

আমি একটি সাধারণ কনসোল অ্যাপ তৈরি করেছি যা এই সক্ষমতা প্রদর্শন করে যা এখানে পাওয়া যাবে: https://github.com/hecked12/SQL-

সংক্ষেপে, সি # আপনাকে এই সীমাবদ্ধতা কাটিয়ে ওঠার অনুমতি দেয় যেখানে আপনি প্রতিটি সঞ্চিত পদ্ধতির আউটপুট পরীক্ষা করতে পারেন এবং সেই আউটপুটটি আপনার পছন্দ মতো ব্যবহার করতে পারেন, উদাহরণস্বরূপ আপনি এটিকে অন্য কোনও সঞ্চিত পদ্ধতিতে খাওয়াতে পারবেন। যদি আউটপুট ঠিক থাকে তবে আপনি লেনদেন করতে পারবেন, অন্যথায়, আপনি রোলব্যাক ব্যবহার করে পরিবর্তনগুলি ফিরিয়ে নিতে পারেন।


-1

এসকিউএল সার্ভার ২০০৮ আর 2 এ, টেবিল কলামগুলিতে আমার একটি মিল নেই যা রোলব্যাক ত্রুটির কারণ হয়েছিল। এটি সরে যায় যখন আমি আমার sqlcmd টেবিল ভেরিয়েবলটি সন্নিবেশিত-এক্সিকিউট স্টেটমেন্ট দ্বারা পপুলেট করে ফেলা হয় যা সঞ্চিত প্রকল্পের সাথে ফিরে আসে match এটি org_code অনুপস্থিত ছিল। উইন্ডোজ সেন্টিমিডি ফাইলে এটি সঞ্চিত পদ্ধতির ফলাফল লোড করে এবং এটি নির্বাচন করে।

set SQLTXT= declare @resets as table (org_id nvarchar(9), org_code char(4), ^
tin(char9), old_strt_dt char(10), strt_dt char(10)); ^
insert @resets exec rsp_reset; ^
select * from @resets;

sqlcmd -U user -P pass -d database -S server -Q "%SQLTXT%" -o "OrgReport.txt"

ওপি নেস্টেড স্টোরেজ পদ্ধতিতে সন্নিবেশ-সম্পাদনা বিবৃতি ব্যবহার করার সময় ঘটে যাওয়া একটি ত্রুটি সম্পর্কে জিজ্ঞাসা করছিল। আপনার সমস্যাটি অন্য কোনও ত্রুটি ফিরে আসবে, যেমন "INSERT বিবৃতিটির জন্য নির্বাচিত তালিকায় সন্নিবেশ তালিকার তুলনায় কম আইটেম রয়েছে SE SELECT মানগুলির সংখ্যা অবশ্যই INSERT কলামের সংখ্যার সাথে মেলে।"
লসবারে

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