এসকিউএল নির্বাচন করুন [কলামএ বাদে] টেবিলএ থেকে] কলামটি বাদ দিন?


733

আমরা সবাই জানি যে একটি টেবিল থেকে সমস্ত কলাম নির্বাচন করতে, আমরা ব্যবহার করতে পারি

SELECT * FROM tableA

সমস্ত কলামগুলি নির্দিষ্ট না করে কোনও টেবিল থেকে কলাম (গুলি) বাদ দেওয়ার উপায় আছে?

SELECT * [except columnA] FROM tableA

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


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

ওপেনকোয়ারির সাথে কাজ করার সময় আমার এটির প্রয়োজন ছিল (যদিও এসকিউএল সার্ভারের চেয়ে মাইএসকিউএলটিতে আমার কার্যকারিতা প্রয়োজন)। এসকিউএল সার্ভার ব্যবহার করে আমাকে একটি মাইএসকিউএল ডাটাবেসটি জিজ্ঞাসা করতে হয়েছিল। যেহেতু একটি মাইএসকিউএল টেবিলের প্রস্থের চারি কলামগুলি স্থির ছিল, আমি কোনও SELECT *কোয়েরি ব্যবহার করতে পারিনি (ওএলই ডিবিতে ম্যাপিংয়ের ক্ষেত্রে সমস্যা রয়েছে)। আমি সঠিক কলামগুলি নির্দিষ্ট করতে পারিনি কারণ মাইএসকিউএল ডাটাবেসে আমার সরাসরি অ্যাক্সেস ছিল না, তবে এসকিউএল সার্ভার আমাকে নির্দিষ্ট প্রস্থের চর কলামগুলির নামগুলি জানাতে যথেষ্ট দয়ালু ছিল ...
জাহু

2
আমি এটি করার জন্য আরও একটি কারণ যুক্ত করতে চাই: SELECT DISTINCT *অন্য কোনও তৈরি করা নকল সারি ছাড়া মূল কলামটি ছাড়া কাজ করা
আন্ডারলাইন করুন

1
আমি একমত যে এটি সময়সাপেক্ষ। এ কারণেই আমি সাধারণত টেবিলে ডান ক্লিক করি, "শীর্ষস্থানীয় 1000 সারি নির্বাচন করুন" নির্বাচন করুন, তারপরে যে কলামগুলি আমি চাই না তা সরিয়ে ফেলুন।
টমাসরন্স

2
ভুলে যাবেন না: অনেক ক্ষেত্রে বিকাশকারী কলামগুলি জানেন না কারণ তারা পরিবর্তন করতে পারে। এটি ডেটা গুদামগুলিতে সাধারণ। 6 মাস পরে, তারা একটি অতিরিক্ত কলাম যুক্ত করে এবং কোডটি পরিবর্তন না করে এটি নির্বাচন করা উচিত।

উত্তর:


445

আমি সবার সাথে একমত ... তবে আমি যদি এইরকম কিছু করতে যাচ্ছিলাম তবে আমি এটি সম্ভবত এটি করতে পারি:

/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable

222
অপর্যাপ্ত ... তবে খুব সৃজনশীল :)
গিলারমো গুটিরিজ

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

2
খুব সুন্দর. অবশ্যই কলামের নামগুলি বিমূর্ত করার সমস্যা সমাধান করে।
টোস্টার

1
@ চিজটিম্মারম্যান - আপনার যদি ডুপ্লিকেট কলামের নামগুলির সাথে জড়িত কোনও প্রশ্ন থাকে, তবে এটি একটি পৃথক সমস্যা, আপনি কোন পদ্ধতির গ্রহণ করছেন সে সম্পর্কে নিয়মিত। গুগল "এসকিউএল কলামের নাম পরিবর্তন" বা "এসকিউএল কলামের নাম"। ভালো কিছু SELECT table1.ID AS table1ID ..., IIRC।
টুলমেকারস্টেভ

3
@ টলমেকারস্টেটিভ এই প্রশ্নের ধারণাটি কেবল আপনার প্রয়োজনীয় কলামগুলি নির্দিষ্ট করা। নামকরণ কলামগুলির জন্য নির্দিষ্ট টেবিলের 20+ কলামগুলি সমস্ত নির্দিষ্ট করে বলা দরকার।
সিস টিমারম্যান

289

না।

রক্ষণাবেক্ষণ-হালকা সেরা অনুশীলন হ'ল কেবল প্রয়োজনীয় কলামগুলি নির্দিষ্ট করা।

কমপক্ষে 2 টি কারণ:

  • এটি ক্লায়েন্ট এবং ডাটাবেসের মধ্যে আপনার চুক্তিটিকে স্থিতিশীল করে তোলে। প্রতিবার একই তথ্য
  • পারফরম্যান্স, সূচিপত্রের আচ্ছাদন

সম্পাদনা (জুলাই ২০১১):

আপনি যদি Columnsকোনও টেবিলের জন্য নোডটি অবজেক্ট এক্সপ্লোরার থেকে টেনে আনেন তবে এটি আপনার জন্য ক্যোয়ারী উইন্ডোতে কলামগুলির একটি সিএসভি তালিকা রাখে যা আপনার লক্ষ্যগুলির মধ্যে একটি অর্জন করে


3
কলামস টেনে আনার বিষয়টি আমি কখনই জানতাম না আপনি জিবিএন আপনাকে আবার দিনটি বাঁচিয়ে রেখেছিলেন বলে ধন্যবাদ জানায়। আপনার
বর্গ

4
SELECT * এর সাথে বৈধ পরিস্থিতি রয়েছে, বিশেষত ETL রুটিনগুলিতে। আমি মনে করি এখানে সেরা উত্তরটি ডায়নামিক এসকিউএল সহ একটি।
মিশকিন

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

3
"কেবল প্রয়োজনীয় কলামগুলি নির্দিষ্ট করুন" - হার্ড কোডিং অস্তিত্ব
আরএম হ্যালি

9
যদিও এর মতো উত্তরগুলি প্রচুর ভোট পায়, তবে আমি যতটা উদাসীন সেগুলির কোনও মূল্য নেই। ধারণাগতভাবে, "এবিসি ব্যতীত * নির্বাচন করুন" সক্ষম হওয়া আর ভাষা সমর্থন করে না এমন "নির্বাচন করুন *" এর বেশি সমস্যা নেই। ওপি স্পষ্টত কিছু অর্জনের জন্য একটি উপায় চাইছে। এই প্রশ্নের উত্তর দেওয়া ব্যক্তির কাছে জানার উপায় নেই যে ওপি উত্পাদন কোডে এটি ব্যবহার করতে চায় বা ডাটাবেসের জন্য কিছু কোড বিকাশ করার সময় যদি তাদের কেবল এই জাতীয় কোনও কোয়েরি চালানোর প্রয়োজন হয়, তাই ভাল মান সম্পর্কে বক্তৃতা কোন মূল্য নেই অবদান।
Itme2003

68

আপনি প্রতিটি কলামের নামের লিখতে না চান তাহলে ম্যানুয়ালি আপনি ব্যবহার করতে পারেন Script Table Asডানে ক্লিক করে টেবিল বা দৃশ্য মধ্যে SSMS ভালো:

এখানে চিত্র বর্ণনা লিখুন

তারপরে আপনি নিউ ক্যোয়ারি এডিটর উইন্ডোতে পুরো সিলেক্ট ক্যোয়ারী পাবেন তারপরে এইভাবে অযাচিত কলামটি সরিয়ে ফেলুন:

এখানে চিত্র বর্ণনা লিখুন

সম্পন্ন


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

68

এসকিউএল (এসকিউএল সার্ভার) এ এটি করার স্বয়ংক্রিয় উপায় হ'ল:

declare @cols varchar(max), @query varchar(max);
SELECT  @cols = STUFF
    (
        ( 
            SELECT DISTINCT '], [' + name
            FROM sys.columns
            where object_id = (
                select top 1 object_id from sys.objects
                where name = 'MyTable'
            )
            and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
            FOR XML PATH('')
        ), 1, 2, ''
    ) + ']';

SELECT @query = 'select ' + @cols + ' from MyTable';  
EXEC (@query);

আপনি যদি কোনও সিটিই বা অন্যান্য সাবকিউয়ের ফলাফল থেকে জিজ্ঞাসা করছেন? একটি সাধারণ উদাহরণ: আপনি এমন একটি সাবকিউরি তৈরি করতে চাইতে পারেন যা row_number()প্রতিটি সারিতে ফলাফল সংযোজন করে , তারপরে একটি সংযুক্তি সম্পাদন করে row_number, তারপরে যোগদানের ফলাফল থেকে বাদ দিয়েrow_number সমস্ত কিছুই নির্বাচন করে।
ely

43

আপনি এমন একটি ভিউ তৈরি করতে পারেন যাতে কলামগুলি আপনি নির্বাচন করতে চান, তারপরে আপনি কেবল select *দৃশ্য থেকে ...


8
প্রথমে আমার প্রতিক্রিয়াটি ছিল "কলামগুলি নির্দিষ্ট করার চেয়ে এটি কীভাবে সহজ"? তবে আমি স্থির করেছি যে রক্ষণাবেক্ষণের দিক থেকে এটি সম্ভবত উন্নতি হতে পারে।
টুলমেকারস্টেভ

1
এটি কোনও টেম্প টেবিল বা গতিশীল এসকিউএল এর সাথে পাল্টা পরামর্শ দেওয়ার পরিবর্তে কোয়েরি অপটিমাইজারকে সমর্থন করে।
আন্ডারস্কোর_

30

হ্যাঁ এটি সম্ভব (তবে প্রস্তাবিত নয়)।

CREATE TABLE contact (contactid int, name varchar(100), dob datetime)
INSERT INTO contact SELECT 1, 'Joe', '1974-01-01'

DECLARE @columns varchar(8000)

SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob'
ORDER BY ORDINAL_POSITION

EXEC ('SELECT ' + @columns + ' FROM contact')

কোডের ব্যাখ্যা :

  1. কলামের পৃথক কলামের নামের তালিকা সংরক্ষণ করার জন্য একটি ভেরিয়েবল ঘোষণা করুন। এটি NUL এর ডিফল্ট।
  2. আমাদের সারণীতে কলামগুলির নাম নির্ধারণ করতে একটি সিস্টেম ভিউ ব্যবহার করুন।
  3. SELECT @variable = @variable + ... FROMকলামের নামগুলি বোঝাতে ব্যবহার করুন । এই জাতীয় ধরণের SELECTফলাফল ফলাফল দেয় না। এটি সম্ভবত অননুমোদিত আচরণ তবে এসকিউএল সার্ভারের প্রতিটি সংস্করণে কাজ করে। বিকল্প হিসাবে আপনি ব্যবহার করতে পারেনSET @variable = (SELECT ... FOR XML PATH('')) স্ট্রিংগুলি সংহত ।
  4. ISNULLযদি এটি প্রথম কলামের নাম না হয় তবেই কমাটি প্রিপেন্ড করতে ফাংশনটি ব্যবহার করুন । QUOTENAMEকলামের নামগুলিতে স্পেস এবং বিরামচিহ্নগুলি সমর্থন করতে ফাংশনটি ব্যবহার করুন ।
  5. WHEREআমরা দেখতে চাই না কলামগুলি লুকানোর জন্য এই ধারাটি ব্যবহার করুন ।
  6. রানটাইম সময়ে কলামের নামগুলি সমাধান করতে ডায়নামিক এসকিউএলEXEC (@variable) নামেও পরিচিত Use এটি প্রয়োজনীয় কারণ আমরা সংকলনের সময় কলামের নামগুলি জানি না।

ধন্যবাদ! এটিই ছিল আমার সমস্যা সমাধানের মূল চাবিকাঠি ।
আন্তোনিও

আমার একটি প্রশ্ন আছে: যে কারণে দ্বিতীয় নির্বাচনকে একটি এক্সইসি স্টেটমেন্টে রাখতে হবে? আমি দেখেছি এটি কার্যকরভাবে প্রয়োজনীয়, তবে আমি অবাক হয়েছি কেন আমি কেবল লিখতে পারি নাSELECT @columns FROM contact
অ্যান্টোনিও

17

অন্যরা যেমন বলেছে এটি করার কোনও উপায় নেই তবে আপনি যদি এসকিএল সার্ভারটি ব্যবহার করেন তবে আমি আউটপুটকে কমা দ্বারা পৃথক করে পরিবর্তন করতে পারি তবে তা করুন

select top 1 * from table

এবং আউটপুট উইন্ডো থেকে কলামগুলির পুরো তালিকাটি কেটে ফেলুন। তারপরে আপনি সমস্ত কলামটি না লিখে আপনি কোন কলামগুলি চান তা চয়ন করতে পারেন।



11

মূলত, আপনি যা চান তা করতে পারবেন না - তবে জিনিসগুলিকে কিছুটা সহজ করে তোলার জন্য আপনি সঠিক সরঞ্জামগুলি পেতে পারেন।

আপনি যদি রেড-গেটের এসকিউএল প্রম্পটটি দেখেন প্রম্পটটি দেখেন, আপনি "SELECT * FRM MyTable" টাইপ করতে পারেন, এবং তারপরে "*" এর পরে কার্সারটি আবার সরিয়ে ফেলতে পারেন, এবং ক্ষেত্রগুলির তালিকাটি প্রসারিত করতে <TAB> টিপুন এবং আপনাকে কয়েকটি ক্ষেত্র সরিয়ে ফেলতে পারেন দরকার নেই

এটি একটি নিখুঁত সমাধান নয় - তবে এটি একটি ভাল! :-) খুব খারাপ এমএস এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর ইন্টেলিসেন্স এখনও এই বৈশিষ্ট্যটি সরবরাহ করার মতো বুদ্ধিমান নয় .......

আঙ্গুরের ছিরড়া


এটি ভাল, তবে সমস্যাটি আপনার ক্যোয়ারী বিশাল আকার ধারণ করতে পারে। প্রোড কোডের জন্য নয়, "বাদে" বৈশিষ্ট্যটি পাওয়া ভাল লাগবে, তবে অ্যাড-হক অনুসন্ধান করা হবে।
মাইকা বি।

8

না এটি করার কোনও উপায় নেই। আপনার পরিস্থিতিতে যদি এটি সম্ভব হয় তবে আপনি কাস্টম মতামত তৈরি করতে পারেন

সম্পাদনা হতে পারে যদি আপনার ডিবি গতিশীল স্কয়ারের সম্পাদন সমর্থন করে আপনি একটি এসপি লিখতে এবং কলামগুলি আপনি দেখতে চান না তা পাস করতে পারেন এবং এটি গতিশীলভাবে ক্যোয়ারী তৈরি করতে এবং আপনাকে ফলাফলটি ফেরত দিতে পারে। আমি মনে করি এটি এসকিউএল সার্ভার ন্যূনতমে করণীয়


13
এটি করণীয় তবে আমি সেই ব্যক্তিকে বহিষ্কার করব।
লিভেন কের্মসেকার্স

ক্লাসিক ক্লিনআপ সমস্যা: আপনি যে টেম্পলেটটি টেম্পল টেবিলে রাখতে চান তা অনুলিপি করুন, বড়টি কেটে ফেলুন, টেম্প টেবিলটি পুনরায় পূরণ করুন। আপনাকে পরিচয় কলামটি বাদ দিতে হবে।
ভোলকার

8

আপনি যদি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করেন তবে নিম্নলিখিত হিসাবে করুন:

  1. আপনার পছন্দসই সারণীগুলির নাম টাইপ করুন এবং এটি নির্বাচন করুন
  2. চাপুন Alt+F1
  3. o / p সারণীতে কলামগুলি দেখায়।
  4. পছন্দসই কলামগুলি নির্বাচন করুন
  5. আপনার নির্বাচিত ক্যোয়ারীগুলিতে অনুলিপি করুন এবং আটকান
  6. জিজ্ঞাসা ফায়ার।

উপভোগ করুন।


7

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


6

সংক্ষেপে আপনি এটি করতে পারবেন না, তবে আমি উপরের সমস্ত মন্তব্যের সাথে একমত নই, সেখানে "এমন" পরিস্থিতি রয়েছে যেখানে আপনি বৈধভাবে একটি ব্যবহার করতে পারেন * যখন আপনি একটি সম্পূর্ণ তালিকা থেকে একটি নির্দিষ্ট পরিসর নির্বাচন করার জন্য নেস্টেড কোয়েরি তৈরি করেন (যেমন পেজিং) আপনি কেন এটি অভ্যন্তরীণভাবে সম্পন্ন করার পরে বিশ্বের প্রতিটি কলামকে বাইরের নির্বাচনী বিবৃতিতে নির্দিষ্ট করতে চান?


আপনি যোগদানের সময় "নির্বাচন করুন টেবিল 1। * ..." এর মতো অভ্যন্তরীণ কলামগুলিকে উপস্থাপন করতে "অভ্যন্তরীণ নাম। *" এর কিছু প্রকরণ ব্যবহার করতে পারেন?
টুলমেকারস্টেভ

6
DECLARE @SQL VARCHAR(max), @TableName sysname = 'YourTableName'

SELECT @SQL = COALESCE(@SQL + ', ', '') + Name 
FROM sys.columns
WHERE OBJECT_ID = OBJECT_ID(@TableName)
AND name NOT IN ('Not This', 'Or that');

SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + @TableName

EXEC (@SQL)

হালনাগাদ:

আপনি যদি আরও প্রায়ই এটি ব্যবহার করেন তবে এই কাজের যত্ন নিতে আপনি একটি সঞ্চিত পদ্ধতিও তৈরি করতে পারেন। এই উদাহরণে আমি বিল্টটি STRING_SPLIT () এ ব্যবহার করেছি যা এসকিউএল সার্ভার ২০১+++ এ উপলব্ধ, তবে আপনার যদি প্রয়োজন হয় তবে কীভাবে এসওতে এটি ম্যানুয়ালি তৈরি করা যায় তার উদাহরণ রয়েছে।

CREATE PROCEDURE [usp_select_without]
@schema_name sysname = N'dbo',
@table_name sysname,
@list_of_columns_excluded nvarchar(max),
@separator nchar(1) = N','
AS
BEGIN
 DECLARE 
 @SQL nvarchar(max),
 @full_table_name nvarchar(max) = CONCAT(@schema_name, N'.', @table_name);

 SELECT @SQL = COALESCE(@SQL + ', ', '') + QUOTENAME([Name])
 FROM sys.columns sc
 LEFT JOIN STRING_SPLIT(@list_of_columns_excluded, @separator) ss ON sc.[name] = ss.[value]
 WHERE sc.OBJECT_ID = OBJECT_ID(@full_table_name, N'u')
 AND ss.[value] IS NULL;

 SELECT @SQL = N'SELECT ' + @SQL + N' FROM ' + @full_table_name;
 EXEC(@SQL)
END

এবং তারপরে ঠিক:

EXEC [usp_select_without] 
@table_name = N'Test_Table',
@list_of_columns_excluded = N'ID, Date, Name';

5

যদি আমরা প্রক্রিয়াগুলির কথা বলি, তবে এটি একটি নতুন ক্যোয়ারী উত্পন্ন করতে এবং এটি অবিলম্বে কার্যকর করতে এই কৌশলটির সাথে কাজ করে:

SELECT LISTAGG((column_name), ', ') WITHIN GROUP (ORDER BY column_id)
INTO var_list_of_columns
FROM ALL_TAB_COLUMNS
WHERE table_name = 'PUT_HERE_YOUR_TABLE'
AND column_name NOT IN ('dont_want_this_column','neither_this_one','etc_column');

5

সমস্ত কলামগুলি নির্দিষ্ট না করে কোনও টেবিল থেকে কলাম (গুলি) বাদ দেওয়ার উপায় আছে?

সাধারণ উপায়ে ঘোষিত এসকিউএল ব্যবহার করে, না।

আমি মনে করি আপনার প্রস্তাবিত বাক্য গঠনটি উপযুক্ত এবং ভাল। প্রকৃতপক্ষে, রিলেশনাল ডাটাবেস ল্যাঙ্গুয়েজ 'টিউটোরিয়াল ডি' এর একটি খুব অনুরূপ সিনট্যাক্স রয়েছে যেখানে কীওয়ার্ডগুলির ALL BUTপরে অ্যাট্রিবিউটসের একটি সেট (কলাম) অনুসরণ করা হয়।

যাইহোক, এসকিউএল এর SELECT *ইতিমধ্যে অনেকগুলি ঝাঁকুনি পেয়েছে (@ গুফার উত্তরটি এখানে একটি সাধারণ আপত্তি), তাই আমি SELECT ALL BUTশীঘ্রই এসকিউএল স্ট্যান্ডার্ডে প্রবেশ করব বলে আমি মনে করি না ।

আমি মনে করি সবচেয়ে ভাল 'কাজ করা' হ'ল VIEWতখন আপনার পছন্দমতো কলামগুলি সহ একটি তৈরি করা SELECT * FROM ThatView


1
@ মাউন্ডস_ডি: আমি এখন আমার উত্তরটি সংশোধন করেছি।
onedaywhen

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

5

বিগকিউরির মতো একটি আধুনিক এসকিউএল উপভাষা একটি দুর্দান্ত সমাধানের প্রস্তাব দেয়

নির্বাচন করুন * ছাড়ুন (কলামনামএক্স, [কলামনাম, ...])

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

ডেটা বিজ্ঞানীরা কোয়েরি সংক্ষিপ্ত করার জন্য একটি দ্রুত বিকল্প পেতে সক্ষম হতে এবং কিছু কলামগুলি সরিয়ে ফেলতে সক্ষম হতে (নকল বা অন্য কোনও কারণে) like

https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers


4

Postgres বর্গক্ষেত্র এটি করার একটি উপায় আছে

প্লিজ উল্লেখ করুন: http://www.postgresonline.com/j Journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-colums-in-a-table.html

তথ্য স্কিমা হ্যাক ওয়ে

SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
        FROM information_schema.columns As c
            WHERE table_name = 'officepark' 
            AND  c.column_name NOT IN('officeparkid', 'contractor')
    ), ',') || ' FROM officepark As o' As sqlstmt

আমার নির্দিষ্ট উদাহরণ টেবিলের জন্য উপরেরটি - এর মতো দেখায় এমন স্কিল স্টেটমেন্ট উত্পন্ন করে

ও.অফিসপার্ক, ও মালিক, ও। অফিসপর্ক থেকে স্পেসফুটেজ নির্বাচন করুন ও হিসাবে


যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
ভার্গব রাও

3

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

আপনি অবশ্যই আপনার এসকিউএল স্টেটমেন্টটি গতিশীলভাবে তৈরি করতে এবং সার্ভারটিকে এটি সম্পাদন করতে পারেন have তবে এটি এসকিউএল ইঞ্জেকশনের সম্ভাবনা উন্মুক্ত করে ..


3

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

আপনি যদি ম্যানেজমেন্ট স্টুডিও ক্যোয়ারী সম্পাদক ব্যবহার করছেন, ডাটাবেসটি প্রসারিত করুন, তারপরে আপনি যে সারণীটি নির্বাচন করছেন তা প্রসারিত করুন যাতে আপনি কলামগুলির ফোল্ডারটি দেখতে পারেন।

আপনার বাছাই বিবৃতিতে, কেবল উপরের রেফারেন্সযুক্ত কলামগুলি ফোল্ডারটি হাইলাইট করুন এবং এটিকে টানুন এবং ক্যোয়ারী উইন্ডোতে ফেলে দিন। এটি টেবিলের সমস্ত কলাম পেস্ট করবে, তারপরে কেবল কলামের তালিকা থেকে সনাক্তকরণ কলামটি সরিয়ে ফেলবে ...


1
হ্যাঁ, তবে আপনার সাথে যদি 5 জন যোগ দেয় তবে কী করতে হবে তা ধারণাটি হবেSELECT * Except(tableName.ColumnName) FROM ...
পাভেল সিওচ

আমি এটি দরকারী মনে করি :) আমি এটি সম্পর্কে জানি না, তবুও এটি বিষয় প্রশ্নের উত্তর নয়।
এফকা

3

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

example

mysql> SELECT * FROM calls;
+----+------------+---------+
| id | date       | user_id |
+----+------------+---------+
|  1 | 2016-06-22 |       1 |
|  2 | 2016-06-22 |    NULL |
|  3 | 2016-06-22 |    NULL |
|  4 | 2016-06-23 |       2 |
|  5 | 2016-06-23 |       1 |
|  6 | 2016-06-23 |       1 |
|  7 | 2016-06-23 |    NULL |
+----+------------+---------+
7 rows in set (0.06 sec)

mysql> CREATE VIEW C_VIEW AS
    ->     SELECT id,date from calls;
Query OK, 0 rows affected (0.20 sec)

mysql> select * from C_VIEW;
+----+------------+
| id | date       |
+----+------------+
|  1 | 2016-06-22 |
|  2 | 2016-06-22 |
|  3 | 2016-06-22 |
|  4 | 2016-06-23 |
|  5 | 2016-06-23 |
|  6 | 2016-06-23 |
|  7 | 2016-06-23 |
+----+------------+
7 rows in set (0.00 sec)

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

5
এই এক ধরণের বিষয়টি মিস করে। আপনি দ্বিতীয় কলটিতে "আইডি, তারিখ" নির্বাচন করছেন, যা আপনি যদি এটি করতে যাচ্ছেন তবে এটি প্রথম স্থানে করুন।
কিথপজল্লি 20'17

3

উদাহরণস্বরূপ আপনি যদি পাসওয়ার্ডের মতো সংবেদনশীল কেস কলামটি বাদ দিতে চান তবে আমি মানটি আড়াল করতে এটি করি:

SELECT * , "" as password FROM tableName;


এটি আমার জন্য কাজ করেছে
অরুণ প্রসাদ ES

1
আপনার অবশ্যই কখনই আপনার ডেটাবেজে পরিষ্কার-পাঠ্য পাসওয়ার্ড সংরক্ষণ করবেন না। অন্তত তারা লবণ এবং হয়ত মরিচ কুচি-কুচি করিয়া কাটা বস্তু দিতে হবে security.stackexchange.com/questions/3272/...
Anders_K

2

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


2

একটি কোয়েলেজ একটি ভাল বিকল্প পরামর্শ:

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

সম্পন্ন...

এটি আমাদের অনেক সাহায্য করেছে।


1

অবজেক্ট এক্সপ্লোরারে ডান ক্লিক টেবিল, শীর্ষ 1000 সারি নির্বাচন করুন

এটি সমস্ত কলাম তালিকাভুক্ত করবে এবং * নয়। তারপরে অযাচিত কলাম (গুলি) সরান। এটি টাইপ করার চেয়ে অনেক দ্রুত হওয়া উচিত।

তারপরে আপনি যখন মনে করেন এটি কিছুটা বেশি কাজ, তখন রেড গেটের এসকিউএল প্রম্পট পান এবং টিবিএল থেকে এসএসএফ টাইপ করুন, * এ যান এবং আবার ট্যাবে ক্লিক করুন।


1

এই ক্ষেত্রে আমি প্রায়শই যা ব্যবহার করি তা:

declare @colnames varchar(max)=''

select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4)

SET @colnames=RIGHT(@colnames,LEN(@colnames)-1)

@colnames দেখতে column1,column2,column5


1

কখনও কখনও একই প্রোগ্রামে অবশ্যই বিভিন্ন ডাটাবেস স্টাচগুলি পরিচালনা করতে হয়। সুতরাং selectবিবৃতিতে ত্রুটি এড়াতে আমি প্রোগ্রামটিতে একটি কলাম তালিকা ব্যবহার করতে পারিনি ।

*আমাকে সমস্ত alচ্ছিক ক্ষেত্র দেয়। আমি ব্যবহারের আগে ডেটা টেবিলের ক্ষেত্রগুলি বিদ্যমান কিনা তা পরীক্ষা করে দেখছি। এই ব্যবহার করার জন্য আমার কারণ নেই *যে select

এইভাবে আমি বাদ পড়া ক্ষেত্রগুলি পরিচালনা করি:

Dim da As New SqlDataAdapter("select * from table", cn)
da.FillSchema(dt, SchemaType.Source)
Dim fieldlist As String = ""
For Each DC As DataColumn In DT.Columns
   If DC.ColumnName.ToLower <> excludefield Then
    fieldlist = fieldlist &  DC.Columnname & ","
   End If
  Next

আপনার প্রশ্ন / সমস্যাটি বিশদ / স্পষ্ট করে বিবেচনা করুন।
Badfilms

1

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

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ', ', ' ' ) + name from sys.columns where name not in ('colName1','colName2') and object_id = (Select id from sysobjects where name = 'tblName')
SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + 'tblName'
EXEC sp_executesql  @SQL

0

এটি করা সহজ হবে না:

sp_help <table_name>

- 'কলাম_নাম' কলামে ক্লিক করুন> অনুলিপি করুন> একটি নতুন ক্যোয়ারী উইন্ডোতে আটকান (একটি উল্লম্ব তালিকা তৈরি করে) এবং প্রতিটি কলামের মানের সামনে কমা লিখুন ... আপনি যে কলামগুলি চান না তা মন্তব্য করুন ... আরও কম এখানে প্রদত্ত যে কোনও কোডের চেয়ে টাইপিং এবং এখনও পরিচালনাযোগ্য।


"এখানে প্রদত্ত যে কোনও কোডের তুলনায় অনেক কম টাইপিং" এবং ক্যোয়ারী সম্পাদক বা তালিকাটি পাওয়ার অন্য কোনও উচ্চতর উপায়ে কলামগুলির নোডকে টেনে আনার চেয়ে অনেক বেশি ঝামেলা। আমি বোঝাতে চাইছি অনেকগুলি 10 কলামের টেবিলগুলি কী?
আন্ডারস্কোর_

0

আপনি devart.com থেকে এসকিউএল সম্পূর্ণ পেতে পারেন, যা কেবল রেড গেট থেকে এসকিউএল প্রম্পটের মতো * ওয়াইল্ডকার্ডকে প্রসারিত করে না (কের্নজের উত্তরে বর্ণনা করা হয়েছে), পাশাপাশি চেকবক্সগুলিতে একটি কলাম পিকারটি ড্রপও সরবরাহ করে যাতে আপনি সমস্ত পরীক্ষা করতে পারেন নির্বাচিত তালিকায় আপনি যে কলামগুলি চান তা সেগুলি আপনার জন্য স্বয়ংক্রিয়ভাবে প্রবেশ করানো হবে (এবং যদি আপনি কোনও কলামটি চেক না করেন তবে এটি স্বয়ংক্রিয়ভাবে নির্বাচিত তালিকা থেকে সরানো হবে)।


0

এসএসএমএসে ইন্টেলিজেন্স এবং আলিয়াজিংয়ের সাথে একটি সহজ উপায় রয়েছে । এটা চেষ্টা কর

  1. পাঠ্য সম্পাদকটিতে রাইট-ক্লিক করুন এবং নিশ্চিত করুন যে ইন্টেলিসেন্স সক্ষম রয়েছে।
  2. একটি উপনামের সাথে ক্যোয়ারী টাইপ করুন [নির্বাচন করুন । * Tablename T থেকে]।
  3. যান টেক্সট টি। * এবং মুছে * , এবং SSMS ইচ্ছা স্বয়ংক্রিয় তালিকার কলাম ওরফে টেবিল।
এরপরে আপনি কেবলমাত্র কলামগুলি নির্দিষ্ট করতে পারবেন যা আপনি ডকুমেন্ট / ও ও এসএসএমএস ব্যবহার করে অন্য স্ক্রিপ্টে একটি নির্বাচন লিখতে চান এবং তারপরে আরও অনুলিপি / পেস্ট ক্রিয়াকলাপ করতে পারেন। আমি এই সব সময় ব্যবহার।


দয়া করে কলাম বাদ দেওয়ার বিষয়ে আপনার উত্তরটি নির্দিষ্ট করতে পারেন?
কামিক্কোলো

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