আমি কীভাবে এসকিউএল-সার্ভারে টেবিল ভেরিয়েবলগুলি ড্রপ করব? আমি কি এটা করা উচিত?


123

আমার স্ক্রিপ্টে টেবিলের পরিবর্তনশীল রয়েছে (সঞ্চিত পদ্ধতি নয়)। দুটি প্রশ্ন:

  1. আমি টেবিলের পরিবর্তনশীল কীভাবে বাদ দেব? ড্রপ টেবিল @ ভারনাম একটি "ভুল সাইনট্যাক্স" ত্রুটি দেয়।
  2. আমি কি সবসময় এই কাজ করা উচিত? শুনেছি এটি একটি ভাল অনুশীলন। এটির মতো ছোট স্ক্রিপ্টগুলির জন্য এটি কি সত্যই কখনও প্রয়োজন?

আমার কোডটি এখানে:

Declare @projectList table(
    name varchar(40) NOT NULL);

Insert Into @projectList
Values ('BCR-00021')

Select *
From @projectList

Drop Table @projectList -- does not work

আপনি এগুলি নিজেই ফেলে দিতে পারবেন না যাতে আপনার প্রশ্নের ২ য় অংশ প্রযোজ্য না।
মার্টিন স্মিথ

উত্তর:


189

সারণী ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে স্থানীয় এবং স্বয়ংক্রিয়ভাবে বাদ যায় - আপনাকে এটি নিয়ে চিন্তা করতে হবে না।


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

10
লেনদেন দ্বারা তাদের প্রভাবিত না হওয়ার বিষয়ে @ জেএনকেগুলি পয়েন্টটি গুরুত্বপূর্ণ, আপনি কোনও ত্রুটি রোলব্যাকের কারণ হওয়ার পরে ডেটা ধরে রাখতে এবং লগ টেবিলটিতে লেখার জন্য সারণী ভেরিয়েবলগুলি ব্যবহার করতে পারেন।
এইচএলজিইএম

3
না এটা এক নয়। টেম্প টেবিলগুলি লেনদেনে অংশ নেয়।
পল পেরিগনি

তেমনি তারা সিটিইর মতো নয়।
হোগান

আপনি এগুলি ফেলে দিতে পারবেন না তবে আপনি তাদের 'প্রোজেক্টলিস্ট মুছুন' মুছে ফেলতে পারেন;)
আর কে শর্মা

29

সারণী ভেরিয়েবলগুলি কেবল ইনট বা ভার্চার ভেরিয়েবলগুলির মতো are

আপনার এগুলি ফেলে দেওয়ার দরকার নেই। তাদের ইনট বা ভারচার ভেরিয়েবলগুলির মতো একই স্কোপ বিধি রয়েছে

একটি ভেরিয়েবলের সুযোগ হ'ল ট্রান্সঅ্যাক্ট-এসকিউএল স্টেটমেন্টের পরিসীমা যা ভেরিয়েবলকে রেফারেন্স করতে পারে। পরিবর্তনশীলের ব্যাপ্তিটি ব্যাচ বা সঞ্চিত প্রক্রিয়াটির শেষ অবধি ঘোষণা করা হয়, যেখানে এটি ঘোষিত হয়।


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

21

যদি অন্য কেউ যদি এটির সামনে আসে ... এবং লুপের সময় আপনার সত্যিই এটি ফেলে দেওয়া দরকার হয়, আপনি কেবল সারণী ভেরিয়েবল থেকে সমস্ত মুছতে পারেন:

DELETE FROM @tableVariableName

7

তবে আপনারা সকলেই উল্লেখ করতে ভুলে গেছেন যে, যদি কোনও ভেরিয়েবল টেবিলটি একটি লুপের মধ্যে ব্যবহার করা হয় তবে এটি একটি লুপের মধ্যে আবার ডেটা লোড করার আগে খালি করতে হবে (@ টেবিলটি মুছুন)।


3

টেম্পটিবলগুলির মতো, টেম্পডিবিতেও একটি স্থানীয় টেবিল ভেরিয়েবল তৈরি করা হয়। সারণী ভেরিয়েবলের সুযোগ হ'ল ব্যাচ, সঞ্চিত পদ্ধতি এবং স্টেটমেন্ট ব্লক যা এটি ঘোষণা করা হয়েছে। তারা পদ্ধতির মধ্যে পরামিতি হিসাবে পাস করা যেতে পারে। আপনি যে অধিবেশন তৈরি করে সেটিকে বন্ধ করলে এগুলি স্বয়ংক্রিয়ভাবে বাদ পড়ে যায়।


# টেম্প টেবিলটি @ টেবিল ভেরিয়েবলের সমান নয়, প্যাচ বা স্কোপ শেষ হওয়ার পরে এটি স্বয়ংক্রিয়ভাবে নেমে যায় না, কেবলমাত্র এটি সংরক্ষণ করা পদ্ধতির অভ্যন্তরে তৈরি করা হয়েছিল এবং সঞ্চিত প্রক্রিয়াটি কার্যকর হলে শেষ হবে
আবু-এমিশ

1

এখানে একটি সমাধান

Declare @tablename varchar(20)
DECLARE @SQL NVARCHAR(MAX)

SET @tablename = '_RJ_TEMPOV4'
SET @SQL = 'DROP TABLE dbo.' + QUOTENAME(@tablename) + '';

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@tablename) AND type in (N'U'))
    EXEC sp_executesql @SQL;

এসকিউএল সার্ভার 2014 ক্রিস্টোফের উপর সূক্ষ্মভাবে কাজ করে

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