Welcome to Sign in | Help

Re: update pe un field

  •  01-22-2008, 11:25 AM

    Re: update pe un field

    Daca vb. de sincronizarea datelor (sau chiar a structurii) a două tabele se poate utiliza începând cu SQL2005 utilitarul tablediff:
    BOL URL ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/sqlcmpt9/html/3c3cb865-7a4d-4d66-98f2-5935e28929fc.htm

    Exemplu:
    --///////////////////////////////////////////////////////////////////
    USE test
    GO

    --tabela sursa
    CREATE TABLE [dbo].[Angajat](
      [Id] [int] PRIMARY KEY,
      [Nume] [varchar](50) NOT NULL,
      [Prenume] [varchar](50) NOT NULL,
      [Departament] [varchar](50) NOT NULL
    )
    GO

    INSERT INTO Angajat VALUES (1,'ION','IONESCU','FINANCIAR')
    INSERT INTO Angajat VALUES (2,'POPA','POPESCU','FINANCIAR')
    INSERT INTO Angajat VALUES (3,'VASILE','VASILESCU','CONTABILITATE')
    GO

    SELECT * FROM Angajat
    GO
    --///////////////////////////////////////////////////////////////////

    --///////////////////////////////////////////////////////////////////
    USE testdep
    GO

    --tabela destinatie
    SELECT *
    INTO Angajat
    FROM Test.dbo.Angajat
    GO

    SELECT * FROM Angajat
    GO
    --///////////////////////////////////////////////////////////////////

    --///////////////////////////////////////////////////////////////////
    --TEST
    --Etapa [1] inserare, modificare, stergeri in tabela sursa test.dbo.Angajat
    --<etapa_1>
    USE test
    GO

    INSERT INTO Angajat VALUES (4,'ACE','DETECTIVUL','ZUZU')
    INSERT INTO Angajat VALUES (5,'LUI','PESTE','ZUZU')
    UPDATE Angajat SET Departament = 'ZUZU' WHERE Id = 1
    DELETE FROM Angajat WHERE Id = 3
    GO
    --</etapa_1>

    --Etapa [2] executie tablediff pentru generarea scriptului de sincronizare
    /*
    D:\Documents and Settings\bgdn>cd\
    D:\>cd Program Files\Microsoft SQL Server\90\COM
    D:\Program Files\Microsoft SQL Server\90\COM>TableDiff -sourceserver "(local)\SQLEXPRESS,1433" -sour
    cedatabase "test" -sourcetable "Angajat" -destinationserver "(local)\SQLEXPRESS,1433" -destinationda
    tabase "testdep" -destinationtable "Angajat" -f "d:\script.sql"

    User-specified agent parameter values:
    -sourceserver (local)\SQLEXPRESS,1433
    -sourcedatabase test
    -sourcetable Angajat
    -destinationserver (local)\SQLEXPRESS,1433
    -destinationdatabase testdep
    -destinationtable Angajat
    -f c:\script.sql

    Table [test].[dbo].[Angajat] on (local)\SQLEXPRESS,1433 and Table [testdep].[dbo].[Angajat] on (loca
    l)\SQLEXPRESS,1433 have 4 differences.
    Fix SQL written to c:\script.sql.
    Err Id Col
    Mismatch 1 Departament
    Dest. Only 3
    Src. Only 4
    Src. Only 5
    The requested operation took 0.4375 seconds.

    D:\Program Files\Microsoft SQL Server\90\COM>
    */



    --Etapa [3] Executie script de sincronizare d:\script.sql in Management Studio sau sqlcmd
    -- Host: (local)\SQLEXPRESS,1433
    -- Database: [testdep]
    -- Table: [dbo].[Angajat]
    USE testdep
    GO

    UPDATE [dbo].[Angajat] SET [Departament]='ZUZU' WHERE [Id] = 1
    DELETE FROM [dbo].[Angajat] WHERE [Id] = 3
    INSERT INTO [dbo].[Angajat] ([Departament],[Id],[Nume],[Prenume]) VALUES ('ZUZU',4,'ACE','DETECTIVUL')
    INSERT INTO [dbo].[Angajat] ([Departament],[Id],[Nume],[Prenume]) VALUES ('ZUZU',5,'LUI','PESTE')
    GO


    --Etapa [3] verificare inregistrarilor din cele 2 tabele
    --<etapa_3>
    SELECT * FROM test.dbo.Angajat
    SELECT * FROM testdep.dbo.Angajat
    --</etapa_3>
    --///////////////////////////////////////////////////////////////////

    Cu putin efort, sincronizarea poate fi automatizata.
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems