আমি কীভাবে একক ডাটাবেসে সমস্ত ট্রিগার ফেলে দিতে পারি?


17

আমার কাছে 104 ট্রিগারযুক্ত একটি ডাটাবেস আছে, 'সিস্টেম_ডিব_আউডিটস' নামক একক ডাটাবেস থেকে একক কমান্ডের সাহায্যে সমস্ত ট্রিগার মুছার উপায় আছে কি?

উত্তর:


29

আপনি sys.triggersকার্যকর করতে পারেন এমন ক্যোয়ারী তৈরি করতে আপনি ডায়নামিক এসকিউএল এবং ডিএমভি ব্যবহার করতে পারেন ।

is_ms_shippedএসকিউএল সার্ভারের সাথে যে কোনও ট্রিগার প্রেরণ করা হয়েছে তা বাদ দেয়।
parent_class_descডাটাবেস স্তরের পরিবর্তে অবজেক্ট স্তরের ট্রিগারগুলির জন্য ফিল্টার।

পরিবর্তন PRINTএকটি থেকে EXECএকবার আপনি আউটপুট খুশি।

USE system_db_audits;
GO

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += 
    N'DROP TRIGGER ' + 
    QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id)) + N'.' + 
    QUOTENAME(t.name) + N'; ' + NCHAR(13)
FROM sys.triggers AS t
WHERE t.is_ms_shipped = 0
  AND t.parent_class_desc = N'OBJECT_OR_COLUMN';

PRINT @sql;

5

Sys.Triggersট্রিগার হ'ল প্রতিটি বস্তুর জন্য একটি সারি থাকে এমন মেটা ডেটা টেবিল ব্যবহার করুন

  1. এখানে প্রদর্শিত সরঞ্জামদণ্ড বোতামটি ক্লিক করে আউটপুট মোডটিকে পাঠ্যে পরিবর্তন করুন:

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

  1. এই স্ক্রিপ্টটি কার্যকর করুন:

    USE YourDBName
    GO
    SELECT ' GO ' + Char(10) + Char(13) + 'DROP TRIGGER ' 
        + QUOTENAME(OBJECT_SCHEMA_NAME(O.[object_id])) + '.' 
        + QUOTENAME(name)
    FROM sys.sql_modules as M 
        INNER JOIN sys.triggers as O 
            ON M.object_id = O.object_id; 
  2. একটি নতুন এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও উইন্ডোতে আউটপুট অনুলিপি করুন, কোডটি আপনি প্রত্যাশা করছেন কর্ম সম্পাদন করে যাচাই করুন এবং সম্পাদন করুন।


না DROP TRIGGERবিবৃতি terminators প্রয়োজন ;যদিও?
ypercubeᵀᴹ

এমএসডিএন বলছে: ট্রানজ্যাক্ট-এসকিউএল স্টেটমেন্ট টার্মিনেটর S এসকিউএল সার্ভারের এই সংস্করণে বেশিরভাগ বিবৃতি দেওয়ার জন্য যদিও সেমিকোলনটির প্রয়োজন নেই, এটি ভবিষ্যতের সংস্করণে প্রয়োজন হবে।
এএএসসি

2

ট্রিগার মুছে ফেলার কাজটি করতে আপনি যদি কোনও কেন্দ্রীয় সার্ভারে [সার্ভারএ] একটি স্কুয়েল কাজ চালাতে চান, আমি একটি পাওয়ারশেল সংস্করণ সরবরাহ করব এটি ধরে নিয়ে একটি এসকিউএল সার্ভার ২০১২ (বা তারপরের) উদাহরণটি [সার্ভারএ] এ এসকিউএলপিএস মডিউল ইনস্টল করা আছে ass

বলুন যে আপনি [সার্ভারবি] এসকিউএল সার্ভার উদাহরণ (এসকিউএল সার্ভার ২০০+) -র [অ্যাডভেঞ্চার ওয়ার্কস) ডাটাবেসে সমস্ত ট্রিগার মুছতে চান।

আপনি [সার্ভারএ] এ নিম্নলিখিত পিএস চালাতে পারেন:

import-module sqlps -DisableNameChecking;
$db=get-item -Path "sqlserver:\sql\ServerB\default\databases\AdventureWorks";

#before deletion, you can check that triggers do exist
$db.tables.triggers | select name

#now delete
$db.tables.triggers |Where-Object {-not $_.IsSystemObject } | foreach-object {$_.drop()};

#check after deletion
$db.tables.triggers | select name;

দয়া করে মনে রাখবেন সার্ভারবি এবং অ্যাডভেঞ্চার ওয়ার্কগুলিকে আপনার নিজস্ব মান দিয়ে প্রতিস্থাপন করুন ।

এটি বেশ নমনীয় সমাধান যা আপনি সহজেই অন্যান্য বিভিন্ন প্রয়োজনীয়তার সাথে খাপ খাইয়ে নিতে কাস্টমাইজ করতে পারেন, যেমন কেবল নির্দিষ্ট টেবিলগুলির একটি নির্দিষ্ট সেটগুলির সাথে সম্পর্কিত ট্রিগারগুলি মুছুন বা কিছু নির্দিষ্ট ট্রিগারগুলি (মুছার পরিবর্তে) অক্ষম করুন ইত্যাদি etc.

কঠোরভাবে বলতে, @Mark Sinkinson দ্বারা উপলব্ধ সমাধানের কারণ প্রয়োজন সঠিক নয় না 'system_db_audits' ডিবি উপর মুছুন ট্রিগার, কিন্তু অন্য ডিবি মধ্যে ট্রিগার মুছে ফেলতে থেকে 'system_db_audits'। এর অর্থ আপনি @ system_db_audits 'এবং লক্ষ্য ডিবি উভয় একই স্কেল সার্ভারের উদাহরণ হিসাবে ধরে নিয়েছেন যে টার্গেট ট্রিগারগুলি মুছে ফেলার জন্য @Mark সিনকিনসন সরবরাহ করেছেন "ডায়নামিক এসকিএল" মোড়ানোর জন্য আপনাকে' system_db_audits 'এ একটি গতিশীল স্কয়ার তৈরি করতে হবে। অন্যথায় যদি দুটি dbs একই উদাহরণে না থাকে তবে মুছে ফেলা (যেমন লিঙ্কযুক্ত সার্ভারের মাধ্যমে ইত্যাদি) পরিচালনা করা এমনকি অনেক "কুশ্রী" হবে। এই জাতীয় দৃশ্যে, PS হ'ল একটি মার্জিত সমাধান যেখানে লক্ষ্য ডিবি হয় বা একই স্কেল উদাহরণে হয় না।

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