실제로 SQL Server를 좋아할 수도 있습니다.

2972 단어
어떻게 이런 일이 발생했습니까? 이제 실제로 SQL Server를 좋아할 것 같습니다.



몇 년 전 JOIN이 포함된 SQL 쿼리를 작성하는 것에 대해 투덜거렸을 때를 기억합니다. 어떤 이유로 그 당시에는 JOIN에 대해 머리를 숙일 수 없었습니다.

오늘은 완전히 다른 이야기입니다. 다음을 수행하는 배포 스크립트를 작성했습니다.
  • 데이터베이스 삭제,
  • 백업 파일에서 데이터베이스를 복원했습니다.
  • 데이터베이스 테이블을 생성했습니다.
  • 테이블의 내용을 이 테이블에 복사했습니다.
  • 일부 트리거를 비활성화했다가 다시 활성화했습니다.
  • 테이블에서 일부 제약 조건 및 열이 삭제됨
  • 및 일부 열의 이름을 변경했습니다.

  • 오늘 아침에 SQL Server에 대한 지식을 가지고 눈을 뜬 것은 아닙니다. 수년 동안 업무용 데이터베이스에 추가 기능을 추가하고 기능을 변경했으며 시간이 지남에 따라 SQL에 대한 자신감이 커졌습니다.

    위의 모든 단계에 대해 Google 검색을 통해 SQL 구문을 찾았습니다. 한동안 SQL을 사용하여 어떻게 작동하는지 확인하고 작은 단계로 나눌 수 있습니다.

    저번에blogged 현재 잘못된 데이터베이스를 개선하는 작업을 하고 있는데 오늘은 배포 프로세스를 테스트하고 싶었습니다. 모든 변경 사항은 SSDT 프로젝트에 있으므로 데이터베이스를 백업하고 게시하려고 했습니다.

    오류! 귀하의 변경 사항으로 인해 데이터 손실이 발생하며 해당 오류를 예상했기 때문에 놀랄 일이 아닙니다. 이것의 주범은 내가 쓴 방아쇠 였지만 하루가 끝날 때까지 찾지 못했습니다.

    백업 작업을 하면서 파괴적인 변경을 포함하여 내가 좋아하는 것을 할 수 있었습니다. 사전 배포 스크립트를 만들어 보았습니다. 이것이 먼저 실행되면 SQL Server와 일치하므로 데이터가 손실되지 않는다고 SSDT를 설득할 수 있다고 생각했습니다.

    이것은 작동하지 않았지만 위에서 언급한 스크립트의 시작 부분을 만들었습니다. 3단계와 4단계가 있었습니다. 먼저 스크립트를 실행한 다음 SSDT 프로젝트의 배포를 실행해 보겠습니다. 이 작업을 수행하려면 데이터베이스를 몇 번 다시 빌드해야 합니다. 스크립트에 추가할 수 있다고 생각할 때까지 SQL Management Studio를 사용하여 수동으로 몇 번 수행했습니다. 이제 1단계와 2단계가 완료되었습니다.

    그런 다음 트리거에 대한 오류가 발생하여 비활성화하고 완료된 후 다시 활성화했습니다. 5단계입니다.

    마지막으로 일부 열을 삭제해야 했고 이로 인해 제약 조건에 대한 오류가 발생했습니다. 몇 번의 시행착오를 거쳐 삭제해야 하는 제약 조건을 찾은 다음 열을 삭제할 수 있습니다.

    마지막 단계는 일부 열의 이름을 바꾸는 것이었습니다. 이 후에 Visual Studio에서 게시를 실행할 수 있다고 생각했습니다. 아니요, 여전히 데이터 손실에 대해 불평했습니다. 다른 트리거를 떨어뜨린 다음 오류 없이 모든 것을 실행할 수 있습니다.

    와우! 나는 영리하지 않습니다. 내 코드의 단순화된 버전은 다음과 같습니다.

    USE master -–can’t drop the database if its open!
    –-Step 1
    DROP DATABASE DBName
    
    –-Step 2
    RESTORE DATABASE DBName FROM DISK=’E:\DBName.bak’
    WITH
    MOVE ‘DBName_dat’ TO ‘C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBName.mdf’,
    MOVE ‘DBName_log’ TO ‘C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBName.ldf’,
    REPLACE,
    STATS=10
    USE DBName –-swap back to the database you just restored
    
    –-Step 3
    CREATE TABLE TName2 (
    ID INT NOT NULL,
    Name NVARCHAR(50) NOT NULL,
    Address NVARCHAR(50) NOT NULL,
    City NVARCHAR(50) NOT NULL,
    Postcode NVARCHAR(50) NOT NULL)
    
    -–Step 5
    DISABLE TRIGGER TR_Trigger ON TName1
    GO
    
    –-Step 4
    INSERT INTO TName2 (Id,Name)
    SELECT Id, Name FROM TName1
    GO
    
    –-Step 6
    ALTER TABLE TName1
    DROP CONSTRAINT [DF_Id], [DF_Name]
    GO
    ALTER TABLE TName1
    DROP COLUMN Id, Name
    GO
    
    –-Step 7
    sp_RENAME ‘TName1.City’, ‘Area’ , ‘COLUMN’
    GO
    
    –-drop that last trigger
    DROP TRIGGER TR_Trigger2
    GO
    
    –-Step 5
    ENABLE TRIGGER TR_Trigger ON TName1
    
    

    좋은 웹페이지 즐겨찾기