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

SQL सर्वर में डेटाबेस में सभी तालिकाओं को छोटा करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 55

परिदृश्य:

आइए एक डेटाबेस के बारे में सोचें जिसका उपयोग हम अपनी ETL प्रक्रिया के लिए करते हैं और हम उस डेटाबेस को स्टेजिंग कहते हैं। हम सुबह में सभी तालिकाओं को छोटा करना चाहते हैं ताकि उनका उपयोग दैनिक प्रक्रिया के लिए किया जा सके। एक बार तरीका यह है कि हम प्रत्येक तालिका के लिए अपना ट्रंकेट स्टेटमेंट लिखें, लेकिन टेबल को गिराया जा सकता है या नई टेबल भी बनाई जा सकती हैं। हम एक क्वेरी लिखना चाहते हैं जिसका उपयोग हम डेटाबेस से सभी तालिकाओं को छोटा करने के लिए कर सकते हैं और हमें अपने Truncate कथनों को फिर से लिखने की आवश्यकता नहीं है।

यदि तालिकाओं में प्राथमिक कुंजी नहीं है - विदेशी कुंजी संबंध, हम ट्रंकेट का उपयोग कर सकते हैं। लेकिन हमारे पास अक्सर टेबल होते हैं जिन्हें अन्य तालिकाओं द्वारा संदर्भित किया जाता है। हम उन तालिकाओं के लिए Truncate कथन का उपयोग नहीं कर सकते हैं। उन तालिकाओं को छोटा करने का एकमात्र तरीका यह है कि ट्रंकेटिंग से पहले विदेशी कुंजी बाधा को छोड़ दें और उसके बाद संबंध को छोटा करें और फिर से बनाएं।

नीचे दिए गए कोड का उपयोग डेटाबेस से सभी तालिकाओं को छोटा करने के लिए किया जा सकता है। यदि टेबल्स में पीके-एफके संबंध होगा, तो स्क्रिप्ट पहले विदेशी कुंजी बाधाओं को छोड़ देगी और फिर उन तालिकाओं को छोटा कर देगी और अंत में विदेशी कुंजी बाधाओं को फिर से बनाएगी।

स्क्रिप्ट के नीचे चलाने से पहले, सुनिश्चित करें कि आप हैं डेटाबेस और सर्वर को सही करने की ओर इशारा करते हुए! SQL सर्वर डेटाबेस से सभी तालिकाओं को छोटा करने के साथ शुभकामनाएँ।


-- Drop Temp Tables if Exists
 IF OBJECT_ID('tempdb..#DropConstraint') IS NOT NULL
  DROP TABLE #DropConstraint

 IF OBJECT_ID('tempdb..#CreateConstraint') IS NOT NULL
  DROP TABLE #CreateConstraint

 IF OBJECT_ID('tempdb..#TempTruncateTables') IS NOT NULL
    DROP TABLE #TempTruncateTables


-- Drop Constraint Script Save in #DropConstraint Temp Table 
SELECT 'ALTER TABLE ' + '['
       + Schema_name(o.schema_id) + '].['
       + OBJECT_NAME(FK.parent_object_id) + ']'
       + ' DROP  CONSTRAINT ' + '[' + FK.name + ']' AS DropConstraintQuery

 INTO   #DropConstraint
 FROM   sys.foreign_keys AS FK
       INNER JOIN sys.foreign_key_columns AS FKC
               ON FK.OBJECT_ID = FKC.constraint_object_id
       INNER JOIN sys.objects O
               ON O.OBJECT_ID = FKC.parent_object_id
. पर

-- Create Constraint Script Save in #CreateConstraint Temp Table  . में कंस्ट्रेंट स्क्रिप्ट सेव करें
SELECT 'ALTER TABLE ' + '['
       + Schema_name(o.schema_id) + '].' + '['
       + OBJECT_NAME(FK.parent_object_id) + ']'
       + ' ADD CONSTRAINT ' + '[' + FK.name
       + '] Foreign Key (['
       + (SELECT name
          FROM   sys.columns c
          WHERE  c.OBJECT_ID = FKC.parent_object_id
                 AND c.column_id = FKC.parent_column_id)
       + ']) REFERENCES ' + '['
       + Schema_name(o.schema_id) + '].['
       + (SELECT name
          FROM   sys.objects o
          WHERE  OBJECT_ID = FKC.referenced_object_id)
       + '] (['
       + (SELECT name
          FROM   sys.columns c
          WHERE  c.OBJECT_ID = FKC.referenced_object_id
                 AND c.column_id = FKC.referenced_column_id)
       + '])' AS CreateConstraintQuery

 INTO   #CreateConstraint
 FROM   sys.foreign_keys AS FK
       INNER JOIN sys.foreign_key_columns AS FKC
               ON FK.OBJECT_ID = FKC.constraint_object_id
       INNER JOIN sys.objects o
               ON FKC.parent_object_id = o.OBJECT_ID

-- Build Truncate Statement for all the tables and save into #TempTruncateTables में सेव करें
 SELECT 'Truncate table ' + Schema_name(schema_id)
       + '.' + name AS TruncateTableQuery

 INTO   #TempTruncateTables 
FROM   sys.tables
 WHERE  TYPE = 'U'
       AND is_ms_shipped = 0

GO


-- Drop Constraints
 DECLARE @DropConstraintQuery AS VARCHAR(4000)
 DECLARE DropConstraintCur CURSOR FOR
  SELECT DropConstraintQuery
  FROM   #DropConstraint

 OPEN DropConstraintCur 
FETCH Next FROM DropConstraintCur 
 INTO @DropConstraintQuery
 WHILE @@FETCH_STATUS = 0
  BEGIN
      DECLARE @SQL VARCHAR(MAX)=NULL
      SET @SQL=@DropConstraintQuery
      EXEC (@SQL)
      PRINT ' Query ::' + @DropConstraintQuery
            + 'Completed'
      FETCH Next FROM DropConstraintCur INTO @DropConstraintQuery
  END
CLOSE DropConstraintCur 

DEALLOCATE DropConstraintCur
GO-- Truncate tables 

DECLARE @TempTruncateTablesCur AS VARCHAR(4000) 
DECLARE TempTruncateTablesCur CURSOR FOR
  SELECT TruncateTableQuery
  FROM   #TempTruncateTables 
से
OPEN TempTruncateTablesCur
 FETCH Next FROM TempTruncateTablesCur 
 INTO @TempTruncateTablesCur
 WHILE @@FETCH_STATUS = 0
  BEGIN
      DECLARE @SQL VARCHAR(MAX)=NULL

      SET @SQL=@TempTruncateTablesCur

      EXEC (@SQL)

      PRINT ' Query ::' + @TempTruncateTablesCur
            + 'Completed'
      FETCH Next FROM TempTruncateTablesCur INTO @TempTruncateTablesCur
  END
CLOSE TempTruncateTablesCur 

DEALLOCATE TempTruncateTablesCur
GO



-- Create Constraint After Truncate 
DECLARE @CreateConstraintQuery AS VARCHAR(4000) 
DECLARE CreateConstraintQueryCur CURSOR FOR
  SELECT CreateConstraintQuery
  FROM   #CreateConstraint

 OPEN CreateConstraintQueryCur 
FETCH Next FROM CreateConstraintQueryCur 
 INTO @CreateConstraintQuery 
WHILE @@FETCH_STATUS = 0
  BEGIN
      DECLARE @SQL VARCHAR(MAX)=NULL
      SET @SQL=@CreateConstraintQuery
      EXEC (@SQL)
      PRINT ' Query ::' + @CreateConstraintQuery
            + 'Completed'
      FETCH Next FROM CreateConstraintQueryCur INTO  @CreateConstraintQuery
  END
CLOSE CreateConstraintQueryCur

 DEALLOCATE CreateConstraintQueryCur

GO 




Things we covered in this Post
  • How to drop temp table if exists in SQL Server
  • How to use system tables to get Primary key and foreign key Constraint
  • How to use Cursors in SQL Server 
  • How to Drop Foreign Key Constraints dynamically and Recreate them
  • How to Truncate all tables in SQL Server Database
  • How to use Dynamic SQL in TSQL
  • How to use Variables in TSQL

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में DELETE और TRUNCATE तालिका के बीच अंतर

  2. SQL सर्वर में एक ऑटो इंक्रीमेंट प्राथमिक कुंजी को कैसे परिभाषित करें

  3. ASP.Net में SQL इंजेक्शन को रोकना

  4. PHP FreeTDS एक्सटेंशन का उपयोग करके MSSQL सर्वर से UTF-8 वर्णसेट के साथ डेटा प्राप्त करना

  5. SQL त्रुटि:कीवर्ड 'उपयोगकर्ता' के पास गलत सिंटैक्स