Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

ट्रिगर हटाएं के बजाय रिकॉर्ड हटाएं

इस विधि को चाल चलनी चाहिए। ट्रिगर के बजाय स्वचालित रूप से हटाने के बजाय जो कुछ भी आप निर्दिष्ट करते हैं वह करेगा। इसका मतलब यह है कि यह महत्वपूर्ण है कि आप इसमें डिलीट मैन्युअल रूप से करें या रिकॉर्ड डिलीट नहीं होगा। यह पुनरावर्ती रूप से नहीं चलेगा। यह केवल कैस्केड डिलीट इनेबल किए बिना टेबल पर ही किया जा सकता है। मूल रूप से चाल यह है कि आप आईडी फ़ील्ड पर मूल तालिका में शामिल हो जाते हैं ताकि उस फ़ील्ड से डेटा प्राप्त किया जा सके जिसकी आपके पास हटाए गए छद्म तालिका में पहुंच नहीं है।

create table dbo.mytesting (test_id int, sometext text)
go
create table dbo.myaudit (test_id int, sometext text)
go
insert into dbo.mytesting
values (1, 'test')
go

Create Trigger audit_Table_Deletes on dbo.mytesting INSTEAD OF delete  
as 
if @@rowcount = 0 return; 
Insert into dbo.myaudit (test_id, sometext) 
Select d.test_id, t.sometext from deleted d 
join dbo.mytesting t on t.test_id = d.test_id

Delete dbo.mytesting where test_id in (select test_id from deleted)
go

delete dbo.mytesting where test_id = 1
select * from dbo.mytesting
select * from dbo.myaudit 
Go 

drop table dbo.mytesting
drop table dbo.myaudit

यदि आप फ़ील्ड को varchar(max) या nvarchar(max) में बदल सकते हैं तो यह सबसे अच्छा समाधान है। टेक्स्ट और ntext को हटा दिया गया है और अगले संस्करण में SQL सर्वर से पूरी तरह से हटा दिया जाना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस से अशक्त दिनांक समय कैसे प्राप्त करें?

  2. मैं PHP के साथ काम करने के लिए SQLSRV एक्सटेंशन कैसे प्राप्त करूं, क्योंकि MSSQL पदावनत है?

  3. SQL सर्वर - डेटा को लॉक किए बिना बड़ी तालिकाओं को मर्ज करना

  4. डेटाबेस मेल प्रोफ़ाइल (SSMS) हटाएं

  5. pyodbc.connect() काम करता है, लेकिन sqlalchemy.create_engine().connect() नहीं