Back

การตรวจสอบโครงสร้างของตารางที่แตกต่างกันใน 2 ฐานข้อมูล สำหรับฐานข้อมูล SQL Server

          ในการดูแลบำรุงรักษาระบบสารสนเทศ บางครั้งจะมีขั้นตอนของการพัฒนาระบบเพิ่มเติม หรือปรับแก้ระบบสารสนเทศอยู่ด้วย ซึ่งในกระบวนการทำงานจะมีขั้นตอนของการออกแบบฐานข้อมูลเพิ่มเติม หรือปรับแก้โครงสร้างของตาราง และเมื่อดำเนินการพัฒนาเรียบร้อยจึงจะทำการปรับปรุงที่เครื่องฐานข้อมูลจริง และเพื่อให้มั่นใจว่าเราได้ปรับแก้โครงสร้างของตารางที่เครื่องฐานข้อมูลจริงตรงกันกับเครื่องพัฒนา จึงได้ทำคิวรี่สำหรับตรวจสอบโครงสร้างของตารางที่แตกต่างกันใน 2 ฐานข้อมูล ดังตัวอย่างด้านล่าง
 
BEGIN TRANSACTION T1
      DECLARE @V_TABLE_NAME VARCHAR(150);
      DECLARE @T_REFERENCED TABLE(
          DB_DATABASE_NAME VARCHAR(150) NULL,
          DB_TABLE_NAME VARCHAR(150) NULL,
          DB_COLUMN_NAME VARCHAR(150) NULL,
          DB_DATA_TYPE VARCHAR(150) NULL,
          DB_CHARACTER_MAXIMUM_LENGTH VARCHAR(150) NULL,
          DB_NUMERIC_PRECISION VARCHAR(150) NULL,
          DB_NUMERIC_PRECISION_RADIX VARCHAR(150) NULL,
          DB_NUMERIC_SCALE VARCHAR(150) NULL,
          DB_COLLATION_NAME VARCHAR(150) NULL

      );

      DECLARE C_REFERENCED CURSOR FOR
          SELECT TABLE_NAME
          FROM INFORMATION_SCHEMA.TABLES
          WHERE  TABLE_TYPE = ‘BASE TABLE’
             AND TABLE_CATALOG = ‘ชื่อฐานข้อมูลเครื่องพัฒนา’

          ORDER BY TABLE_NAME;

      OPEN C_REFERENCED;

          FETCH NEXT FROM C_REFERENCED INTO@V_TABLE_NAME;

          WHILE @@FETCH_STATUS = 0
          BEGIN
              INSERT INTO @T_REFERENCED
              (
                   DB_DATABASE_NAME,
                   DB_TABLE_NAME,
                   DB_COLUMN_NAME,
                   DB_DATA_TYPE,
                   DB_CHARACTER_MAXIMUM_LENGTH,
                   DB_NUMERIC_PRECISION,
                   DB_NUMERIC_PRECISION_RADIX,
                   DB_NUMERIC_SCALE,
                   DB_COLLATION_NAME
              )
             SELECT ‘ชื่อฐานข้อมูลเครื่องพัฒนา’,* FROM
             (
                   SELECT
                         DB1.TABLE_NAME,
                         DB1.COLUMN_NAME,
                         DB1.DATA_TYPE,
                         DB1.CHARACTER_MAXIMUM_LENGTH,
                         DB1.NUMERIC_PRECISION,
                         DB1.NUMERIC_PRECISION_RADIX,
                         DB1.NUMERIC_SCALE,
                         DB1.COLLATION_NAME
                 FROM ชื่อฐานข้อมูลเครื่องพัฒนา.INFORMATION_SCHEMA.COLUMNS as DB1
                 WHERE DB1.table_name = @V_TABLE_NAME
                 EXCEPT
                 SELECT
                         DB2.TABLE_NAME,
                         DB2.COLUMN_NAME,
                         DB2.DATA_TYPE,
                         DB2.CHARACTER_MAXIMUM_LENGTH,
                         DB2.NUMERIC_PRECISION,
                         DB2.NUMERIC_PRECISION_RADIX,
                         DB2.NUMERIC_SCALE,
                         DB2.COLLATION_NAME
                 FROM ชื่อฐานข้อมูลเครื่องจริง.INFORMATION_SCHEMA.COLUMNS as DB2
                 WHERE DB2.table_name = @V_TABLE_NAME
              ) AS DATA1;
              FETCH NEXT FROM C_REFERENCED INTO@V_TABLE_NAME;
         END;
      CLOSE C_REFERENCED;
      DEALLOCATE C_REFERENCED;
      SELECT * FROM @T_REFERENCED;
COMMIT TRANSACTION T1
 

จากภาพ เป็นตัวอย่างผลการตรวจสอบโครงสร้างของตารางที่แตกต่างกันใน 2 ฐานข้อมูล โดยจะเห็นว่าแสดงข้อมูลที่แตกต่างกัน 174 แถว