ত্রুটি বার্তায় 'SET' এর অর্থ 'নাল মান একটি সামগ্রিক বা অন্য এসইটি অপারেশন দ্বারা মুছে ফেলা হয়'


18

সহকর্মীর স্ক্রিপ্টটি চালানোর সময় আমি উপরের 'এএনএসআই সতর্কতা' বার্তাটি দেখেছি (এবং আমি জানি না যে বহু বিবৃতিতে কোনটি সতর্কবার্তাটি প্রদর্শিত হয়েছিল)।

অতীতে আমি এটিকে উপেক্ষা করেছি: আমি নিজেকে নালাগুলি এড়িয়ে চলি এবং তাই এগুলি মুছতে পারে এমন কোনও কিছুই আমার বইয়ের একটি ভাল জিনিস! যাইহোক, আজ 'সেট' শব্দটি আক্ষরিক অর্থে আমার দিকে চিৎকার করেছিল এবং আমি বুঝতে পেরেছিলাম যে এই প্রসঙ্গে শব্দের অর্থ কী হবে বলে মনে করা হয় তা আমি জানি না।

আমার প্রথম চিন্তা, এটি বড় হাতের অক্ষরের উপর ভিত্তি করে, এটি হ'ল এটি কী-ওয়ার্ডের উল্লেখ করে SETএবং এর অর্থ 'অ্যাসাইনমেন্ট', যেমন

UPDATE <table> SET ...

...ON DELETE SET NULL...

SET IDENTITY_INSERT <table> ON

এসকিউএল সার্ভার হেল্প অনুসারে, 'এএনএসআই সতর্কতা' বৈশিষ্ট্যটি আইএসও / এএনএসআই এসকিউএল -২২ এর উপর ভিত্তি করে তৈরি করা হয়েছে, যার জন্য একটি অনুচ্ছেদ শিরোনামে 'সেট অপারেশন' শব্দটি ব্যবহার করা হয়েছে, সুতরাং শিরোনাম ক্ষেত্রে, শিরোনামের ক্ষেত্রে ডেটা অ্যাসাইনমেন্ট বিভাগ। যাইহোক, ত্রুটি বার্তার একটি দ্রুত গুগলিংয়ের পরে আমি এমন উদাহরণগুলি দেখতে পাচ্ছি SELECTযা আপাতদৃষ্টিতে কোনও অ্যাসাইনমেন্ট জড়িত নয় এমন প্রশ্নের রয়েছে।

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

গুগল করার সময় আমি একটি এসকিউএল সার্ভার ত্রুটি বার্তাটি লক্ষ্য করেছি:

Table 'T' does not have the identity property. Cannot perform SET operation.

এখানে একই ক্ষেত্রে একই শব্দগুলি 'সেট অপারেশন' কেবল IDENTITY_INSERTসম্পত্তির অ্যাসাইনমেন্টকে বোঝাতে পারে , যা আমাকে আমার প্রথম চিন্তায় ফিরিয়ে আনে।

কেউ কি এই বিষয়ে কোন আলোকপাত করতে পারেন?


আমি সর্বদা ধরে নিয়েছিলাম এর অর্থ সারিগুলির একটি সেট অপারেশন।
মার্টিন স্মিথ

@ মার্টিনস্মিত আমি যেহেতু SETসবসময় কোনও কীওয়ার্ডের মতো পুরো ক্যাপগুলিতে থাকি তাই মনে করি না
জেএনকে

@ জেএনকে - হ্যাঁ এটি সম্পর্কে চিন্তাভাবনা করে আমি ধরেই নিয়েছি আরও কিছু অ-সমষ্টিগত অপারেশন থাকতে হবে যা এই সতর্কতাটি উত্থাপন করে তাই আমি অনুমান করি যে এটি কী তা এটি ব্যাখ্যা করতে পারে যদি!
মার্টিন স্মিথ

SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'অন্যান্য 3 টি ফলাফল দেয় যা সমস্ত SETকিওয়ার্ডকেও ইঙ্গিত করে বলে মনে হয় ।
মার্টিন স্মিথ

আমি আরও কিছু অনুসন্ধান করেছি এবং এটি সম্ভবত গাণিতিক সেটগুলির মতো অপারেশনগুলি সেট করার কথা উল্লেখ করছে। আমি 2k ডক্স এস এস উল্লেখ্য বিষয়ের অনেক পাওয়া set operationsউল্লেখ UNIONএবং INTERSECTএবং EXCEPT, কিন্তু আমি ভুল দিয়ে আসতে না পেতে পারেন NULLসেই পরিস্থিতিতে কোন। আমি মনে করি এটি কোনও উত্তরাধিকারের ত্রুটির বার্তা হতে পারে।
জেএনকে

উত্তর:


13

আমি কেবল এসকিউএল -২২ স্পেসিফিকেশনটি দেখছিলাম এবং একটি উত্তরণ দেখেছি যা আমাকে এই প্রশ্নটির কথা মনে করিয়ে দেয়।

নীচে উল্লিখিত হিসাবে বাস্তবে এই পরিস্থিতির জন্য একটি নির্ধারিত সতর্কতা রয়েছে is

খ) অন্যথায়, টিএক্সকে একক কলামের সারণী হতে দিন <value expression>যা টি এর প্রতিটি সারিটিতে প্রয়োগ করার এবং নাল মানগুলি মুছে ফেলার ফলাফল। যদি এক বা একাধিক নাল মানগুলি মুছে ফেলা হয়, তবে একটি সমাপ্তির শর্ত উত্থাপিত হয়: সতর্কতা-নাল মান সেট ফাংশনে মুছে ফেলা হয়

আমি ধরে নিয়েছি যে SETএসকিউএল সার্ভার ত্রুটি বার্তায় থাকা ত্রুটি বার্তার সেট ফাংশনের একটি রেফারেন্স যদিও আমি নিশ্চিত নই কেন এটি সমষ্টি এবং অন্যান্য সেট ফাংশনগুলির মধ্যে একটি পার্থক্য তৈরি করবে কেন আমি যতদূর দেখতে পাচ্ছি যে তারা সমার্থক। ব্যাকরণ সম্পর্কিত বিট নীচে।

6.5  <set function specification>

         Function

         Specify a value derived by the application of a function to an
         argument.

         Format

         <set function specification> ::=
                COUNT <left paren> <asterisk> <right paren>
              | <general set function>

         <general set function> ::=
                <set function type>
                    <left paren> [ <set quantifier> ] <value expression> <right paren>


         <set function type> ::=
              AVG | MAX | MIN | SUM | COUNT

         <set quantifier> ::= DISTINCT | ALL

9

দ্রুত উত্তর

"অন্যান্য এসইটি * সম্ভবত পুরানো এসকিউএল সার্ভার সংস্করণগুলির সাথে সম্পর্কিত।

এসকিউএল সার্ভার 6.৫ এবং with এর সাথে কাজ করার সময় আমি এটি আরও ফিরে দেখতে পেতাম আমি নিশ্চিত, তবে কিছু সময় হয়ে গেছে। অনেকগুলি quirks ইস্ত্রি করা হয়েছে + এসকিউএল সার্ভার মান আরও অনুসরণ করে

দীর্ঘ্য:

আজকাল, বার্তাটি SET ANSI_WARNINGSকোন ডিফল্ট দ্বারা নিয়ন্ত্রিত হয় ON
এটি নিখুঁতভাবে সম্পর্কিত কিনা

  • একটি সতর্কতা সামগ্রিকভাবে একটি নুল মান দ্বারা উত্পন্ন হয়।
  • ভার্চার টাইপ ক্ষেত্রগুলির জন্য সন্নিবেশ / আপডেটের ক্ষেত্রে নিঃশব্দ কাটা কাটা ঘটে

একটি উদাহরণ:

DECLARE @foo TABLE (bar int NULL);
INSERT @foo VALUES (1), (2), (NULL);

SET ANSI_WARNINGS ON;
SELECT SUM(bar) FROM @foo;
SET ANSI_WARNINGS OFF;

SELECT SUM(bar) FROM @foo;

দেয়

(3 row(s) affected)
---- -----------
ON   3
Warning: Null value is eliminated by an aggregate or other SET operation.
(1 row(s) affected)
---- -----------
OFF  3
(1 row(s) affected)

আরেকটি উদাহরণ:

DECLARE @foo TABLE (bar varchar(5) NULL);
SET ANSI_WARNINGS ON;
INSERT @foo VALUES ('123456'); -- error
GO
DECLARE @foo TABLE (bar varchar(5) NULL);
SET ANSI_WARNINGS OFF;
INSERT @foo VALUES ('123456'); -- OK
GO

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

অবশেষে, কোথাও এই সতর্কতা উত্পন্ন করার জন্য একটি ট্রিগার বা গণিত কলাম বা সূচিযুক্ত ভিউ থাকতে পারে


ত্রুটির বার্তার বাক্যবিন্যাস স্পষ্টভাবে বোঝায় যে কিছু অ-সমষ্টিগত অপারেশন রয়েছে (বা ছিল) যা আমার কাছে ন্যূনালগুলিও দূর করতে পারে।
মার্টিন স্মিথ

@ মার্টিন স্মিথ: একমত এটি আমার (নতুন) শেষ বিবৃতি অনুসারে অপ্রত্যক্ষ হতে পারে। বা কিছু অপ্টিমাইজার কৌশল যা পরিকল্পনায় দেখা যাবে
gbn

লজ্জাজনক যে এসকিউএল সার্ভার 7.0 এর চেয়ে পুরানো যে কোনও জন্য ডক্সটি কোথাও অনলাইনে বলে মনে হচ্ছে না।
মার্টিন স্মিথ

1
উদাহরণ (এই পুরানো জিনিসগুলি খুঁজে পাওয়া শক্ত): kbalertz.com/Feedback.aspx?kbNumber=149921/EN-US
জিবিএন

1
যদিও বাস্তবে এটি দেখে মনে হচ্ছে যে বার্তাটির এসকিউএল সার্ভার 7.0 সংস্করণটি কেবল সতর্কতা ছিল : নাল মান সমষ্টি থেকে বাদ দেওয়া। SET operationবিট যোগ করা হয়নি 2000. পর্যন্ত
মার্টিন স্মিথ

2

সতর্কতার অন্য দিকটি 'সেট' অপারেশনগুলি 'সেট' অপারেশনগুলি বোঝায় - এটি আমার কাছে কোনও বার্তা বাগের মতো লাগে - উদাহরণস্বরূপ এটি উইন্ডোংয়ের ফাংশনগুলির সাথেও উত্পাদিত হয়:

select max(foo) over() as max_foo from (values (1), (2), (null)) as t(foo);
/*
max_foo
-------
2
2
2

Warning: Null value is eliminated by an aggregate or other SET operation.
*/

1
দেখে মনে হচ্ছে এটি এখনও সমাহার অংশটির কথা উল্লেখ করছেMAX()
জেএনকে

এটাকে কি 'একীকরণের অংশ' বলা হয়? আমি জানি তুমি অবশ্যই বলতে চাচ্ছি তা, কিন্তু তারা বিভিন্ন অপারেশন হয় - যেমন তুলনা select max(foo) from (values (1), (2), (null)) as t(foo) where 1=2;বনামselect max(foo) over() from (values (1), (2), (null)) as t(foo) where 1=2;
জ্যাক ডগলাস

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

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