উত্তর:
আপনি ক্যাটালগের ভিউগুলি ব্যবহার করে একটি স্ট্রিং তৈরি করতে পারেন, যেমন:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += '
DROP TABLE '
+ QUOTENAME(s.name)
+ '.' + QUOTENAME(t.name) + ';'
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
PRINT @sql;
-- EXEC sp_executesql @sql;
অবশ্যই সম্ভাব্য গোটাচগুলি রয়েছে, উদাহরণস্বরূপ যদি এই টেবিলগুলির বিদেশী কী সম্পর্ক থাকে তবে আপনাকে প্রথমে এগুলি ফেলে দিতে হবে, বা একটি নির্দিষ্ট ক্রমে টেবিলগুলি ফেলে দেওয়ার জন্য আউটপুটকে সাজিয়ে তুলতে হবে।
কেবল সারণির তালিকা পেতে, ব্যবহার করুন:
SELECT s.name, t.name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
আমি এই কোয়েরিটি চালিয়েছি এবং ফলাফলগুলি সমস্ত টেবিলগুলি ফেলে দেওয়ার জন্য পুনরায় ক্যোয়ারী উইন্ডোতে পেস্ট করেছি:
SELECT 'DROP TABLE ' + NAME from sys.tables
ORDER BY NAME
আপনি যদি সমস্ত টেবিল মুছতে চান তবে এ, বি, সি বা ডি দিয়ে শুরু হওয়া নামগুলি রাখুন:
SELECT 'DROP TABLE ' + NAME from sys.tables
WHERE NAME NOT LIKE '[ABCD]%'
GROUP BY NAME
এটি আপনাকে অনেক বেশি সংখ্যক সারণী মুছতে দেয়।
declare
@cursor as cursor,
@FTABLE as varchar(500)
set @cursor = CURSOR FOR
select 'drop table ' + NAME + ';'
from sys.tables
where not SUBSTRING(NAME,10,3) in
(
'310',
'311',
'312',
'313',
'314',
'320',
'321',
'322'
)
open @cursor
fetch next from @cursor into @FTABLE
while (@@FETCH_STATUS =0)
begin
exec(@FTABLE)
print @FTABLE
fetch next from @cursor into @FTABLE
end
close @cursor
deallocate @cursor
আমি এটি লিখেছি যা আমি লিখেছি:
DECLARE @chv_LG001_TableName nvarchar (100)
DECLARE @chv_DROP_LG001_Tables nvarchar(100)
DECLARE @chv_LG001_Table_Count int
SET @chv_LG001_Table_Count = (SELECT count(OBJECT_NAME(id))
FROM SYSINDEXES
WHERE OBJECTPROPERTY(id,'isUserTable')=1 AND indid < 2
and OBJECT_NAME(id) like 'LG_001%')
IF @chv_LG001_Table_Count > 0
BEGIN
DECLARE Drop_LG001_Tables_Cursor CURSOR FOR
-- This query will give you the table list you are wanting
SELECT OBJECT_NAME(id)
FROM SYSINDEXES
WHERE OBJECTPROPERTY(id,'isUserTable')=1 AND indid < 2
and OBJECT_NAME(id) like 'LG_001%'
OPEN Drop_LG001_Tables_Cursor
FETCH NEXT FROM Drop_LG001_Tables_Cursor INTO @chv_LG001_TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @chv_DROP_LG001_Tables = 'DROP TABLE ' + '[' + @chv_LG001_TableName + ']'
--Print @chv_DROP_LG001_Tables
-- Uncomment the next line when you are ready because it WILL clear out these tables.
--EXEC sp_executesql @chv_DROP_LG001_Tables
FETCH NEXT FROM Drop_LG001_Tables_Cursor
INTO @chv_LG001_TableName
END
CLOSE Drop_LG001_Tables_Cursor
DEALLOCATE Drop_LG001_Tables_Cursor
END
STATIC
এবং / অথবা LOCAL FAST_FORWARD
] ব্যবহার করা উচিত ( sqlperformance.com/2012/09/t-sql-queries/cursor-options )। (3) আপনার অবচয়, পিছনে সামঞ্জস্যতা মত ব্যবহার করা উচিত নয় sysindexes
। (৪) আপনার স্ক্রিপ্ট ধরে নেয় যে সমস্ত টেবিলগুলি dbo
স্কিমাতে রয়েছে (বা আরও খারাপ, নির্বাহক ব্যবহারকারীর ডিফল্ট স্কিমা, যা নাও হতে পারে dbo
)।
এটি execute
নিম্নলিখিত হিসাবে ব্যবহার করে করা যেতে পারে :
declare @sql1 nvarchar(max)
SELECT @sql1 =
STUFF(
(
select ' drop table dbo.[' + name + ']'
FROM sys.sysobjects AS sobjects
WHERE (xtype = 'U') AND (name LIKE 'GROUP_BASE_NEW_WORK_%')
for xml path('')
),
1,1,'')
execute sp_executesql @sql1
dbo
, এবং 2) নামগুলি কখনই একটি ধারণ করতে পারে না ]
- এটি উভয়ই ওপির ক্ষেত্রে সত্য হতে পারে তবে এটি এখনও ভাল হবে এই অনুমানগুলি উল্লেখ করার ধারণা, কারণ তাদের থেকে অনুসরণ করা সতর্কতাগুলি অন্য লোকেদের কাছে পুরোপুরি সুস্পষ্ট নাও হতে পারে। তবুও, যেমন আমি শুরুতে বলেছিলাম, এই উত্তরটির সাথে আমার মূল সমস্যাটি হ'ল এটি কোনও নতুন মান যুক্ত না করে কেবল ইতিমধ্যে বিদ্যমান পরামর্শটি পুনরায় সেট করে।
SELECT s.name, t.name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
ক্যোয়ারির উপরে চলে যান এবং ফলাফলগুলিকে একটি সিএসভিতে সংরক্ষণ করুন। তারপরে সেই সিএসভি একটি নোটপ্যাডে খুলুন। তারপরে ড্রপ টেবিল স্কেমার সাথে স্কিমাটি প্রতিস্থাপন করতে সিটিটিএল + এইচ করুন যা আপনাকে সমস্ত ড্রপ ক্যোয়ারী দেবে, এই স্ক্যুয়াল সরঞ্জামটিতে এই বড় স্ক্যুয়ালটি অনুলিপি করে পেস্ট করবে এবং কার্যকর করবে
যদি আপনার ফলাফল হয়
myschema.table1
myschema.table2
প্রতিস্থাপনের পরে, এটি দেখতে এটির মতো লাগবে
DROP TABLE MYSCHEMA.TABLE1
DROP TABLE MYSCHEMA.TABLE2
PRINT
স্টেটমেন্ট ব্যবহার করে এটি করতে পারেন । আপনার উত্তরটি সর্বোচ্চ ভোট প্রাপ্ত উত্তরের চেয়ে কীভাবে ভাল?