programing

ASP.net Windows Server 2008 R2 웹 서버에 파일을 업로드하려고 할 때 "Access to the path"(경로 접근 거부)라는 오류가 표시됨

oldcodes 2023. 9. 11. 22:13
반응형

ASP.net Windows Server 2008 R2 웹 서버에 파일을 업로드하려고 할 때 "Access to the path"(경로 접근 거부)라는 오류가 표시됨

IIS_IUSRS

바로 그겁니다.

asp.net 계정

해당 위치에 대한 쓰기 권한이 없습니다.그것이 그것이 실패한 이유입니다.

ASP에 대한 리소스 액세스 권한 부여를 고려합니다.NET 요청 ID.

폴더 다운로드 우클릭

원하는 액세스를 위해 상자를 확인합니다(

만약 그것이 당신에게 효과가 없다면, 당신은 같은 방법을 사용합니다.

이제 이것은 당신의 지역을 보여줄 것입니다.

저는 레일즈 액티브 레코드의 마이그레이션을 정말 좋아합니다.소스 저장소에서 쉽게 버전화할 수 있는 DML to ruby 스크립트를 추상화합니다.

하지만, 약간의 일만 있으면, 당신은 같은 일을 할 수 있습니다.모든 DDL 변경사항(ALTER TABLE 등)은 텍스트 파일에 저장할 수 있습니다.파일 이름에 대한 번호 체계(또는 날짜 스탬프)를 유지하고 순서대로 적용합니다.

Rails는 마지막으로 적용된 마이그레이션을 추적하는 '버전' 테이블도 DB에 가지고 있습니다.당신은 같은 일을 쉽게 할 수 있습니다.

소스 컨트롤을 사용하여 데이터베이스 변경을 관리하려면 LiquiBase를 확인하십시오.

단순히 로그인만 하고 프로덕션 데이터베이스를 변경하기 위해 "ALTER TABLE" 명령을 입력하기 시작하면 안 됩니다.내가 하고 있는 프로젝트는 모든 고객 사이트에 데이터베이스가 있기 때문에 데이터베이스의 모든 변경은 두 곳에서 이루어집니다. 새로운 고객 사이트에 새로운 데이터베이스를 만드는 데 사용되는 덤프 파일과 현재 데이터베이스 버전 번호를 파일의 가장 높은 숫자와 비교하여 확인하는 업데이트 파일입니다.데이터베이스를 업데이트합니다.예를 들어, 마지막 몇 가지 업데이트는 다음과 같습니다.

if [ $VERSION \< '8.0.108' ] ; then
  psql -U cosuser $dbName << EOF8.0.108
    BEGIN TRANSACTION;
    --
    -- Remove foreign key that shouldn't have been there.
    -- PCR:35665
    --
    ALTER TABLE     migratorjobitems
    DROP CONSTRAINT migratorjobitems_destcmaid_fkey;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.108'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.108
fi

if [ $VERSION \< '8.0.109' ] ; then
  psql -U cosuser $dbName << EOF8.0.109
    BEGIN TRANSACTION;
    --
    -- I missed a couple of cases when I changed the legacy playlist
    -- from reporting showplaylistidnum to playlistidnum
    --
    ALTER TABLE     featureidrequestkdcs
    DROP CONSTRAINT featureidrequestkdcs_cosfeatureid_fkey;
    ALTER TABLE     featureidrequestkdcs
    ADD CONSTRAINT  featureidrequestkdcs_cosfeatureid_fkey
    FOREIGN KEY     (cosfeatureid)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    --
    ALTER TABLE     ticket_system_ids
    DROP CONSTRAINT ticket_system_ids_showplaylistidnum_fkey;
    ALTER TABLE     ticket_system_ids
    RENAME          showplaylistidnum
    TO              playlistidnum;
    ALTER TABLE     ticket_system_ids
    ADD CONSTRAINT  ticket_system_ids_playlistidnum_fkey
    FOREIGN KEY     (playlistidnum)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.109'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.109
fi

더 좋은 방법이 있을 거라고 확신하지만, 지금까지는 효과가 있었습니다.

네. 코드는 코드입니다.제 경험의 법칙은 개발이나 생산 기계를 보지 않고 처음부터 애플리케이션을 구축하고 배포할 수 있어야 한다는 것입니다.

가장 좋은 방법은 스테이징 서버에서 데이터베이스를 폐기하고 재구축하는 빌드 스크립트를 만드는 것입니다.각 반복에는 데이터베이스 변경을 위한 폴더가 제공되었으며, 모든 변경 내용은 "Drop..."으로 스크립트화되었습니다.생성"의.이렇게 하면 버전을 만들 폴더를 가리키면 언제든지 이전 버전으로 롤백할 수 있습니다.

NaNt/Cruise Control을 사용한 것으로 알고 있습니다.

네, 데이터베이스를 버전화하는 것이 중요하다고 생각합니다.데이터가 아니라 스키마가 확실합니다.

Ruby On Rails에서, 이것은 "migration"이 있는 프레임워크에 의해 처리됩니다.DB를 변경할 때마다 변경사항을 적용하는 스크립트를 만들어 소스 제어로 확인합니다.

저희 샵에서는 이 아이디어를 너무나 좋아해서 셸 스크립트와 앤트를 사용하여 자바 기반 빌드에 기능을 추가했습니다.우리는 이 프로세스를 배포 루틴에 통합했습니다.즉시 DB 버전화를 지원하지 않는 다른 프레임워크에서도 동일한 작업을 수행할 수 있도록 스크립트를 작성하는 것은 상당히 쉬운 일입니다.

Visual Studio의 새 데이터베이스 프로젝트는 소스 제어 및 변경 스크립트를 제공합니다.

이들은 데이터베이스를 비교하는 훌륭한 도구를 가지고 있으며 하나의 스키마를 다른 하나로 변환하는 스크립트를 생성하거나 하나의 데이터를 다른 하나와 일치하도록 업데이트할 수 있습니다.

DB 스키마는 DB를 설명하는 DDL 명령당 하나씩 다수의 작은 .sql 파일을 생성하기 위해 "스레드"됩니다.

+tom


추가정보 2008-11-30

지난 1년간 개발자로 사용해왔는데 정말 마음에 듭니다.내 개발 작업과 프로덕션을 쉽게 비교하고 릴리스에 사용할 스크립트를 생성할 수 있습니다.DBA가 "기업형" 프로젝트에 필요한 기능이 누락된 것은 아닌지 모르겠습니다.

스키마가 sql 파일에 "스레드"되어 있으므로 소스 컨트롤이 잘 작동합니다.

한 가지 장점은 db 프로젝트를 사용할 때 다른 마음가짐을 가져야 한다는 것입니다.이 도구에는 VS의 "db 프로젝트"가 있는데, 이 프로젝트는 단지 sql이고, 스키마와 다른 관리 데이터가 있는 자동으로 생성된 로컬 데이터베이스가 있습니다. 그러나 애플리케이션 데이터와 앱 데이터 개발에 사용하는 로컬 개발 데이터베이스는 없습니다.자동으로 생성된 db를 거의 알지 못하지만, 거기에 알고 있어야만 그냥 둘 수 있습니다 :).이 특별한 db는 그 이름에 guid가 있기 때문에 명확하게 알아볼 수 있고,

VS DB Project는 다른 팀원들이 만든 db 변경사항을 로컬 프로젝트/연관 db에 통합하는 좋은 작업을 수행하지만, 프로젝트 스키마와 로컬 dvdb 스키마를 비교하여 mods를 적용하는 추가적인 작업이 필요합니다.말은 되지만 처음에는 어색해 보입니다.

DB 프로젝트는 매우 강력한 도구입니다.스크립트는 스크립트를 생성할 뿐만 아니라 즉시 적용할 수 있습니다.그것으로 생산 db를 파괴하지 않도록 주의하시기 바랍니다 ;)

저는 VS DB 프로젝트를 정말 좋아하고 앞으로 저의 모든 DB 프로젝트에 이 툴을 사용할 것으로 예상합니다.

+tom

SQL 데이터베이스 소스 제어 관리 시스템을 사용하도록 개발 팀에 요구하는 것은 문제가 발생하는 것을 막을 수 있는 마법의 총알이 아닙니다.데이터베이스 소스 제어는 개발자가 개체에 변경한 내용을 별도의 SQL 스크립트에 저장하고 소스 제어 시스템 클라이언트를 열고 클라이언트를 사용하여 SQL 스크립트 파일을 체크인한 후 실시간 데이터베이스에 적용해야 하므로 추가적인 오버헤드가 발생합니다.

저는 ApexSQL Source Control이라는 SSMS add-in을 사용하는 것을 제안할 수 있습니다.개발자가 SSMS에서 직접 마법사를 통해 데이터베이스 객체를 소스 제어 시스템과 쉽게 매핑할 수 있으며, 추가 기능은 TFS, Git, Subversion 등 SC 시스템을 지원합니다.또한 소스 제어 정적 데이터에 대한 지원도 포함되어 있습니다.

ApexSQL Source Control을 다운로드하여 설치한 후 버전 제어를 원하는 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 SSMS에서 ApexSQL Source Control 하위 메뉴로 이동하면 됩니다. 데이터베이스를 소스 제어에 연결 옵션을 클릭하고 소스 제어 시스템과 개발 모델을 선택합니다.그러면 선택한 소스 제어 시스템에 대한 로그인 정보와 저장소 문자열을 제공해야 합니다.

자세한 정보는 이 기사를 읽을 수 있습니다: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

생성/업데이트 스크립트와 샘플 데이터를 생성하는 스크립트를 저장합니다.

예, 우리는 SQL을 빌드의 일부로 유지함으로써 이를 수행합니다. DROP.sql, CREATE.sql, USER.sql, VUESS.sql 및 버전 제어를 유지하므로 태그가 지정된 버전으로 되돌릴 수 있습니다.

필요할 때마다 db를 재생성할 수 있는 ant task도 있습니다.

또한 SQL은 소스 코드와 함께 태그가 지정됩니다.

지금까지 프로젝트에서 사용한 방식 중 가장 성공적인 방식은 백업과 차등 SQL 파일을 결합한 것입니다.기본적으로 우리는 매 릴리즈 후에 db를 백업하고 SQL 덤프를 수행하여 필요할 경우 처음부터 빈 스키마를 만들 수 있습니다.그런 다음 DB를 변경해야 할 때마다 버전 제어 하에 sql 디렉토리에 다른 스크립트를 추가합니다.파일 이름 앞에는 항상 시퀀스 번호나 날짜가 붙어서 첫 번째 변경 사항은 01_add_created_on_column.sql이고 다음 스크립트는 02_add_customers_index입니다.우리 CI 머신은 이것들을 확인하고 백업에서 복원된 DB의 새로운 복사본에서 순차적으로 실행할 것입니다.

또한 개발자들이 명령어 하나로 로컬 db를 현재 버전으로 다시 초기화하는 데 사용할 수 있는 몇 가지 스크립트가 있습니다.

우리는 우리의 모든 데이터베이스 생성 개체를 소스 제어합니다.또한 개발자들을 정직하게 유지하기 위해(소스 컨트롤에 포함되지 않고도 객체를 생성할 수 있기 때문에), 우리의 dbas는 소스 컨트롤에 없는 것을 주기적으로 찾고, 발견한 것이 있으면 문제가 없는지 묻지도 않고 삭제합니다.

SchemaBank를 사용하여 모든 데이터베이스 스키마 변경을 버전 제어합니다.

  • 첫날부터 db 스키마 덤프를 가져옵니다.
  • 웹 브라우저를 사용하여 스키마 디자인을 변경하기 시작했습니다(SaaS/클라우드 기반이기 때문에).
  • 제가 db서버를 업데이트하고 싶을 때, 저는 그것으로부터 변경(SQL) 스크립트를 생성하여 db에 적용합니다.Schemabank에서는 업데이트 스크립트를 생성하기 전에 버전으로 작업을 수행하도록 명령합니다.저는 이런 연습을 좋아해서 필요할 때는 언제든지 뒤로 갈 수 있습니다.

디자인 작업을 먼저 저장하지 않고는 db 서버를 직접 터치하지 않는 것이 우리 팀의 규칙입니다.하지만 그런 일이 벌어지면 누군가는 편리함을 위해 규칙을 어기고 싶을 수도 있습니다.스키마 덤프를 스키마뱅크로 다시 가져와 불일치가 발견되면 diff를 수행하고 다른 사람에게 bash를 하게 할 것입니다.비록 우리의 db와 스키마 디자인을 동기화하기 위해 그것으로부터 변경 스크립트를 생성할 수는 있지만, 우리는 단지 그것을 싫어합니다.

또한 버전 컨트롤 트리 내에 브랜치를 생성하여 스테이징용 브랜치와 프로덕션용 브랜치를 유지할 수 있도록 했습니다.그리고 하나는 코딩 샌드박스.

버전 제어 n 변경 관리 기능을 갖춘 꽤 깔끔한 웹 기반 스키마 설계 도구.

저는 데이터 자체를 제외하고 베어 메탈로 DB를 다시 만드는 데 필요한 모든 것을 가지고 있습니다.여러 가지 방법이 있겠지만, 제 스크립트 등은 모두 서브버전으로 저장되고, 서브버전에서 DB 구조 등을 다시 구축할 수 있습니다.

일반적으로 변경할 때마다 SQL 스크립트를 작성하고, 변경 사항을 되돌리기 위해 다른 스크립트를 작성하여 해당 스크립트를 버전 관리 상태로 유지합니다.

그러면 온디맨드 방식으로 새로운 최신 데이터베이스를 생성할 수 있고, 수정사항 간에 쉽게 이동할 수 있습니다.릴리스를 수행할 때마다 스크립트를 하나로 묶기 때문에(수동 작업이 다소 필요하지만 실제로는 어려운 경우가 거의 없습니다) 버전 간에 변환할 수 있는 스크립트 세트도 있습니다.

네, 말씀하시기 전에 이건 레일즈나 다른 사람들이 하는 것과 아주 비슷하지만 꽤 잘 되는 것 같아서 뻔뻔하게 아이디어를 내었다고 인정하는 데는 문제가 없습니다 :)

MySQL Workbech에서 내보낸 SQL CREATE 스크립트를 사용한 다음 "SQL ALTER 내보내기" 기능을 사용하면 일련의 생성 스크립트(물론 번호가 매겨진)와 변경 사항을 적용할 수 있는 Altter 스크립트가 생성됩니다.

3.- SQL ALTER 스크립트 내보내기 일반적으로 모델에 대한 변경 사항을 반영하여 ALTER TABLE 문을 지금 손으로 작성해야 합니다.하지만 여러분은 현명하게 워크벤치가 여러분을 위해 힘든 일을 하도록 할 수 있습니다.메인 메뉴에서 File -> Export -> Forward Engineer SQL ALTER Script...를 선택하기만 하면 됩니다.

그러면 현재 모델과 비교할 SQL CREATE 파일을 지정하라는 메시지가 나타납니다.

1단계에서 SQL CREATE 스크립트를 선택합니다.그런 다음 도구가 ALTER TABLE 스크립트를 생성하고 데이터베이스에 대해 이 스크립트를 실행하여 최신 상태로 전환할 수 있습니다.

MySQL Query Browser 또는 mysql 클라이언트를 사용하여 이 작업을 수행할 수 있습니다.Voila! 모델과 데이터베이스가 동기화되었습니다!

출처: MySQL Workbench Community Edition: 스키마 동기화 안내

물론 이 모든 스크립트는 버전 관리 하에 있습니다.

네, 항상.필요할 때마다 유용한 샘플 데이터 집합을 사용하여 프로덕션 데이터베이스 구조를 다시 만들 수 있어야 합니다.그렇지 않으면, 시간이 지남에 따라 일이 계속 진행되도록 작은 변화들이 잊혀지게 되고, 그러다 어느 날 큰 일을 당하게 됩니다.필요 없다고 생각할 수도 있는 보험이지만, 보험을 가입하는 날에는 10배 이상의 가격을 받을 수 있습니다!

데이터베이스 모델 자체에 대해서는 많은 논의가 있었지만, 필요한 데이터도 에 보관하고 있습니다.SQL 파일.

예를 들어, 응용프로그램이 유용하게 사용되기 위해서는 설치 시 다음 사항이 필요할 수 있습니다.

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('AUD', 'Australian Dollars');

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('USD', 'US Dollars');

우리는 다음이라는 파일을 가지고 있을 것입니다.currency.sql을 최신 .sql과 합니다.빌드 프로세스의 수동 단계로 이전 currency.sql 최신 통화sql을 비교하여 업그레이드 스크립트를 작성합니다.

버전과 소스는 데이터베이스를 둘러싼 모든 것을 제어합니다.

  • DDL(생성 및 변경)
  • DML (참고 자료, 코드 등)
  • 데이터 모델 변경(ERwin 또는 ER/Studio 사용)
  • 데이터베이스 구성 변경(사용 권한, 보안 개체, 일반 구성 변경)

Change Manager 및 일부 사용자 지정 스크립트를 사용하여 자동화된 작업을 수행합니다.변경 관리자는 이러한 변경 사항을 모니터링하고 변경이 완료되면 이를 알려줍니다.

저는 모든 DB가 소스 관리 하에 있어야 하고 개발자들은 로컬 데이터베이스를 처음부터 쉽게 만들 수 있는 방법을 가져야 한다고 생각합니다.Visual Studio for Database Professionals에서 영감을 얻어 MS SQL 데이터베이스를 스크립트로 작성하고 로컬 DB 엔진에 쉽게 배포할 수 있는 오픈 소스 도구를 만들었습니다.http://dbsourcetools.codeplex.com/ 에 가보세요. 재미있게 놀아요. - 네이선.

소스는 모든 개체(테이블 정의, 인덱스, 저장 프로시저 등)를 스크립팅하여 데이터베이스 스키마를 제어합니다.그러나 데이터 자체의 경우 정기적인 백업에만 의존해야 합니다.이를 통해 모든 구조적 변경사항을 적절한 개정 이력으로 캡처할 수 있지만 데이터가 변경될 때마다 데이터베이스에 부담을 주지는 않습니다.

우리 회사에서는 데이터베이스 변경 스크립트를 사용합니다.스크립트가 실행되면 해당 이름이 데이터베이스에 저장되고 해당 행이 제거되지 않는 한 다시 실행되지 않습니다.스크립트는 날짜, 시간 및 코드 분기를 기준으로 이름이 지정되므로 제어된 실행이 가능합니다.

스크립트가 실시간 환경에서 실행되기 전에 수많은 테스트가 수행되므로 "Oopsies"는 일반적으로 개발 데이터베이스에서만 발생합니다.

우리는 모든 데이터베이스를 소스 제어로 옮기는 중입니다.sqlcompare를 사용하여 데이터베이스(불행하게도 프로페셔널 에디션 기능)를 스크립팅하고 그 결과를 SVN에 넣고 있습니다.

구현의 성공 여부는 조직의 문화와 관행에 크게 좌우됩니다.여기 있는 사람들은 응용프로그램별로 데이터베이스를 만드는 것을 믿습니다.대부분의 응용프로그램에서 사용되는 공통 데이터베이스 집합이 있으며, 데이터베이스 간 종속성이 많이 발생합니다(일부는 순환).데이터베이스 스키마를 소스 제어에 적용하는 것은 시스템이 가지고 있는 데이터베이스 간 의존성 때문에 어려운 것으로 악명이 높습니다.

행운을 빌어요, 빨리 시도할수록 문제를 빨리 해결할 수 있어요.

저는 ThoughtWorks의 dbdeploy 툴을 http://dbdeploy.com/ 에서 사용한 적이 있습니다.마이그레이션 스크립트를 사용하도록 권장합니다.각 릴리스마다 변경 스크립트를 단일 파일로 통합하여 DBA가 변경 사항을 쉽게 이해하고 '축복'할 수 있도록 지원했습니다.

이것은 저에게도 항상 큰 골칫거리였습니다. 개발 데이터베이스를 빠르게 변경하여 저장하고(변경 스크립트를 저장하는 것을 잊어버림), 그러면 여러분은 꼼짝 못하게 되는 것 같습니다.방금 했던 작업을 취소하고 다시 실행하여 변경 스크립트를 만들 수도 있고, 물론 원하는 경우 처음부터 작성할 수도 있습니다. 스크립트를 작성하는 데 많은 시간이 걸리긴 하지만 말입니다.

과거에 사용한 툴 중에서 이를 도와준 것이 SQL Delta입니다.두 데이터베이스(SQL 서버/Oracle) 간의 차이점을 보여주고 A->B를 마이그레이션하는 데 필요한 모든 변경 스크립트를 생성합니다.또 다른 좋은 점은 프로덕션(또는 테스트) DB와 개발 DB 간의 데이터베이스 내용의 차이점을 모두 보여주는 것입니다.점점 더 많은 앱이 실행에 필수적인 구성과 상태를 데이터베이스 테이블에 저장하기 때문에 적절한 행을 제거, 추가 및 변경하는 변경 스크립트를 사용하는 것은 큰 어려움이 될 수 있습니다.SQL Delta는 데이터베이스의 행을 변경, 추가, 삭제된 Diff 도구에 나타나는 것과 동일하게 보여줍니다.

훌륭한 도구.다음은 링크입니다. http://www.sqldelta.com/

RedGate는 훌륭합니다. 데이터베이스를 변경할 때 새 스냅샷을 생성하고(작은 이진 파일), 해당 파일을 프로젝트에 리소스로 보관합니다.데이터베이스를 업데이트해야 할 때마다 RedGate의 툴킷을 사용하여 데이터베이스를 업데이트하고 빈 데이터베이스에서 새 데이터베이스를 생성할 수 있습니다.

RedGate는 데이터 스냅샷을 만들기도 하지만, 개인적으로 작업한 적은 없지만 그만큼 강력합니다.

참고로 이것도 다나가 며칠 전에 제기한 것입니다.소스 제어에 저장 프로시저/DB 스키마

다음은 sql 서버 2005/2008 데이터베이스에서 db 개체(DDL 문을 통해)의 변경 사항 추적을 구현하는 트리거에 대한 예시적인 빈곤 해결책입니다.데이터베이스 상에서 실행되는 각 sql 명령어에 대해 소스 코드에 필요한 일부 Value xml 태그를 강제로 사용하는 방법에 대한 간단한 샘플도 포함되어 있습니다. + 현재 db 버전 및 유형(dev, test, qa, fb, prod)을 추적하는 방법(dev, test, qa, fb, prod) 등과 같은 추가적인 필요 속성으로 확장할 수 있습니다.코드가 다소 깁니다. 빈 데이터베이스 + 필요한 추적 테이블 구조 + 필요한 db 함수를 만들고 모두 [ga] 스키마로 실행되는 채우기 트리거를 만듭니다.

USE [master]
GO

/****** Object:  Database [DBGA_DEV]    Script Date: 04/22/2009 13:22:01 ******/
CREATE DATABASE [DBGA_DEV] ON  PRIMARY 
( NAME = N'DBGA_DEV', FILENAME = N'D:\GENAPP\DATA\DBFILES\DBGA_DEV.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'DBGA_DEV_log', FILENAME = N'D:\GENAPP\DATA\DBFILES\DBGA_DEV_log.ldf' , SIZE = 6208KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

ALTER DATABASE [DBGA_DEV] SET COMPATIBILITY_LEVEL = 100
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [DBGA_DEV].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

ALTER DATABASE [DBGA_DEV] SET ANSI_NULL_DEFAULT OFF 
GO

ALTER DATABASE [DBGA_DEV] SET ANSI_NULLS OFF 
GO

ALTER DATABASE [DBGA_DEV] SET ANSI_PADDING ON 
GO

ALTER DATABASE [DBGA_DEV] SET ANSI_WARNINGS OFF 
GO

ALTER DATABASE [DBGA_DEV] SET ARITHABORT OFF 
GO

ALTER DATABASE [DBGA_DEV] SET AUTO_CLOSE OFF 
GO

ALTER DATABASE [DBGA_DEV] SET AUTO_CREATE_STATISTICS ON 
GO

ALTER DATABASE [DBGA_DEV] SET AUTO_SHRINK OFF 
GO

ALTER DATABASE [DBGA_DEV] SET AUTO_UPDATE_STATISTICS ON 
GO

ALTER DATABASE [DBGA_DEV] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO

ALTER DATABASE [DBGA_DEV] SET CURSOR_DEFAULT  GLOBAL 
GO

ALTER DATABASE [DBGA_DEV] SET CONCAT_NULL_YIELDS_NULL OFF 
GO

ALTER DATABASE [DBGA_DEV] SET NUMERIC_ROUNDABORT OFF 
GO

ALTER DATABASE [DBGA_DEV] SET QUOTED_IDENTIFIER OFF 
GO

ALTER DATABASE [DBGA_DEV] SET RECURSIVE_TRIGGERS OFF 
GO

ALTER DATABASE [DBGA_DEV] SET  DISABLE_BROKER 
GO

ALTER DATABASE [DBGA_DEV] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO

ALTER DATABASE [DBGA_DEV] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO

ALTER DATABASE [DBGA_DEV] SET TRUSTWORTHY OFF 
GO

ALTER DATABASE [DBGA_DEV] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO

ALTER DATABASE [DBGA_DEV] SET PARAMETERIZATION SIMPLE 
GO

ALTER DATABASE [DBGA_DEV] SET READ_COMMITTED_SNAPSHOT OFF 
GO

ALTER DATABASE [DBGA_DEV] SET HONOR_BROKER_PRIORITY OFF 
GO

ALTER DATABASE [DBGA_DEV] SET  READ_WRITE 
GO

ALTER DATABASE [DBGA_DEV] SET RECOVERY FULL 
GO

ALTER DATABASE [DBGA_DEV] SET  MULTI_USER 
GO

ALTER DATABASE [DBGA_DEV] SET PAGE_VERIFY CHECKSUM  
GO

ALTER DATABASE [DBGA_DEV] SET DB_CHAINING OFF 
GO

EXEC [DBGA_DEV].sys.sp_addextendedproperty @name=N'DbType', @value=N'DEV' 
GO

EXEC [DBGA_DEV].sys.sp_addextendedproperty @name=N'DbVersion', @value=N'0.0.1.20090414.1100' 
GO



USE [DBGA_DEV]
GO
/****** Object:  Schema [ga]    Script Date: 04/22/2009 13:21:29 ******/
CREATE SCHEMA [ga] AUTHORIZATION [dbo]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Contains the objects of the Generic Application database' , @level0type=N'SCHEMA',@level0name=N'ga'
GO
/****** Object:  Table [ga].[tb_DataMeta_ObjChangeLog]    Script Date: 04/22/2009 13:21:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [ga].[tb_DataMeta_ObjChangeLog](
    [LogId] [int] IDENTITY(1,1) NOT NULL,
    [TimeStamp] [timestamp] NOT NULL,
    [DatabaseName] [varchar](256) NOT NULL,
    [SchemaName] [varchar](256) NOT NULL,
    [DbVersion] [varchar](20) NOT NULL,
    [DbType] [varchar](20) NOT NULL,
    [EventType] [varchar](50) NOT NULL,
    [ObjectName] [varchar](256) NOT NULL,
    [ObjectType] [varchar](25) NOT NULL,
    [Version] [varchar](50) NULL,
    [SqlCommand] [varchar](max) NOT NULL,
    [EventDate] [datetime] NOT NULL,
    [LoginName] [varchar](256) NOT NULL,
    [FirstName] [varchar](256) NULL,
    [LastName] [varchar](50) NULL,
    [ChangeDescription] [varchar](1000) NULL,
    [Description] [varchar](1000) NULL,
    [ObjVersion] [varchar](20) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The database version as written in the extended prop of the database' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'TABLE',@level1name=N'tb_DataMeta_ObjChangeLog', @level2type=N'COLUMN',@level2name=N'DbVersion'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'dev , test , qa , fb or prod' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'TABLE',@level1name=N'tb_DataMeta_ObjChangeLog', @level2type=N'COLUMN',@level2name=N'DbType'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The name of the object as it is registered in the sys.objects ' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'TABLE',@level1name=N'tb_DataMeta_ObjChangeLog', @level2type=N'COLUMN',@level2name=N'ObjectName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'TABLE',@level1name=N'tb_DataMeta_ObjChangeLog', @level2type=N'COLUMN',@level2name=N'Description'
GO
SET IDENTITY_INSERT [ga].[tb_DataMeta_ObjChangeLog] ON
INSERT [ga].[tb_DataMeta_ObjChangeLog] ([LogId], [DatabaseName], [SchemaName], [DbVersion], [DbType], [EventType], [ObjectName], [ObjectType], [Version], [SqlCommand], [EventDate], [LoginName], [FirstName], [LastName], [ChangeDescription], [Description], [ObjVersion]) VALUES (3, N'DBGA_DEV', N'en', N'0.0.1.20090414.1100', N'DEV', N'DROP_TABLE', N'tb_BL_Products', N'TABLE', N' some', N'<EVENT_INSTANCE><EventType>DROP_TABLE</EventType><PostTime>2009-04-22T11:03:11.880</PostTime><SPID>57</SPID><ServerName>YSG</ServerName><LoginName>ysg\yordgeor</LoginName><UserName>dbo</UserName><DatabaseName>DBGA_DEV</DatabaseName><SchemaName>en</SchemaName><ObjectName>tb_BL_Products</ObjectName><ObjectType>TABLE</ObjectType><TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/><CommandText>drop TABLE [en].[tb_BL_Products] --<Version> some</Version>&#x0D;
</CommandText></TSQLCommand></EVENT_INSTANCE>', CAST(0x00009BF300B6271C AS DateTime), N'ysg\yordgeor', N'Yordan', N'Georgiev', NULL, NULL, N'0.0.0')
INSERT [ga].[tb_DataMeta_ObjChangeLog] ([LogId], [DatabaseName], [SchemaName], [DbVersion], [DbType], [EventType], [ObjectName], [ObjectType], [Version], [SqlCommand], [EventDate], [LoginName], [FirstName], [LastName], [ChangeDescription], [Description], [ObjVersion]) VALUES (4, N'DBGA_DEV', N'en', N'0.0.1.20090414.1100', N'DEV', N'CREATE_TABLE', N'tb_BL_Products', N'TABLE', N' 2.2.2 ', N'<EVENT_INSTANCE><EventType>CREATE_TABLE</EventType><PostTime>2009-04-22T11:03:18.620</PostTime><SPID>57</SPID><ServerName>YSG</ServerName><LoginName>ysg\yordgeor</LoginName><UserName>dbo</UserName><DatabaseName>DBGA_DEV</DatabaseName><SchemaName>en</SchemaName><ObjectName>tb_BL_Products</ObjectName><ObjectType>TABLE</ObjectType><TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/><CommandText>CREATE TABLE [en].[tb_BL_Products](&#x0D;
    [ProducId] [int] NULL,&#x0D;
    [ProductName] [nchar](10) NULL,&#x0D;
    [ProductDescription] [varchar](5000) NULL&#x0D;
) ON [PRIMARY]&#x0D;
/*&#x0D;
<Version> 2.2.2 </Version>&#x0D;
&#x0D;
*/&#x0D;
</CommandText></TSQLCommand></EVENT_INSTANCE>', CAST(0x00009BF300B62F07 AS DateTime), N'ysg\yordgeor', N'Yordan', N'Georgiev', NULL, NULL, N'0.0.0')
INSERT [ga].[tb_DataMeta_ObjChangeLog] ([LogId], [DatabaseName], [SchemaName], [DbVersion], [DbType], [EventType], [ObjectName], [ObjectType], [Version], [SqlCommand], [EventDate], [LoginName], [FirstName], [LastName], [ChangeDescription], [Description], [ObjVersion]) VALUES (5, N'DBGA_DEV', N'en', N'0.0.1.20090414.1100', N'DEV', N'DROP_TABLE', N'tb_BL_Products', N'TABLE', N' 2.2.2 ', N'<EVENT_INSTANCE><EventType>DROP_TABLE</EventType><PostTime>2009-04-22T11:25:12.620</PostTime><SPID>57</SPID><ServerName>YSG</ServerName><LoginName>ysg\yordgeor</LoginName><UserName>dbo</UserName><DatabaseName>DBGA_DEV</DatabaseName><SchemaName>en</SchemaName><ObjectName>tb_BL_Products</ObjectName><ObjectType>TABLE</ObjectType><TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/><CommandText>drop TABLE [en].[tb_BL_Products] &#x0D;
</CommandText></TSQLCommand></EVENT_INSTANCE>', CAST(0x00009BF300BC32F1 AS DateTime), N'ysg\yordgeor', N'Yordan', N'Georgiev', NULL, NULL, N'0.0.0')
INSERT [ga].[tb_DataMeta_ObjChangeLog] ([LogId], [DatabaseName], [SchemaName], [DbVersion], [DbType], [EventType], [ObjectName], [ObjectType], [Version], [SqlCommand], [EventDate], [LoginName], [FirstName], [LastName], [ChangeDescription], [Description], [ObjVersion]) VALUES (6, N'DBGA_DEV', N'en', N'0.0.1.20090414.1100', N'DEV', N'CREATE_TABLE', N'tb_BL_Products', N'TABLE', N' 2.2.2 ', N'<EVENT_INSTANCE><EventType>CREATE_TABLE</EventType><PostTime>2009-04-22T11:25:19.053</PostTime><SPID>57</SPID><ServerName>YSG</ServerName><LoginName>ysg\yordgeor</LoginName><UserName>dbo</UserName><DatabaseName>DBGA_DEV</DatabaseName><SchemaName>en</SchemaName><ObjectName>tb_BL_Products</ObjectName><ObjectType>TABLE</ObjectType><TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/><CommandText>CREATE TABLE [en].[tb_BL_Products](&#x0D;
    [ProducId] [int] NULL,&#x0D;
    [ProductName] [nchar](10) NULL,&#x0D;
    [ProductDescription] [varchar](5000) NULL&#x0D;
) ON [PRIMARY]&#x0D;
/*&#x0D;
<Version> 2.2.2 </Version>&#x0D;
&#x0D;
*/&#x0D;
</CommandText></TSQLCommand></EVENT_INSTANCE>', CAST(0x00009BF300BC3A69 AS DateTime), N'ysg\yordgeor', N'Yordan', N'Georgiev', NULL, NULL, N'0.0.0')
SET IDENTITY_INSERT [ga].[tb_DataMeta_ObjChangeLog] OFF
/****** Object:  Table [ga].[tb_BLSec_LoginsForUsers]    Script Date: 04/22/2009 13:21:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [ga].[tb_BLSec_LoginsForUsers](
    [LoginsForUsersId] [int] IDENTITY(1,1) NOT NULL,
    [LoginName] [nvarchar](100) NOT NULL,
    [FirstName] [varchar](100) NOT NULL,
    [SecondName] [varchar](100) NULL,
    [LastName] [varchar](100) NOT NULL,
    [DomainName] [varchar](100) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
SET IDENTITY_INSERT [ga].[tb_BLSec_LoginsForUsers] ON
INSERT [ga].[tb_BLSec_LoginsForUsers] ([LoginsForUsersId], [LoginName], [FirstName], [SecondName], [LastName], [DomainName]) VALUES (1, N'ysg\yordgeor', N'Yordan', N'Stanchev', N'Georgiev', N'yordgeor')
SET IDENTITY_INSERT [ga].[tb_BLSec_LoginsForUsers] OFF
/****** Object:  Table [en].[tb_BL_Products]    Script Date: 04/22/2009 13:21:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [en].[tb_BL_Products](
    [ProducId] [int] NULL,
    [ProductName] [nchar](10) NULL,
    [ProductDescription] [varchar](5000) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object:  StoredProcedure [ga].[procUtils_SqlCheatSheet]    Script Date: 04/22/2009 13:21:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [ga].[procUtils_SqlCheatSheet]                

as                 
set nocount on                 

--what was the name of the table with something like role                
/*                
SELECT * from sys.tables where [name] like '%POC%'                
*/                
-- what are the columns of this table                 
/*                
select column_name , DATA_TYPE , CHARACTER_MAXIMUM_LENGTH,  table_name  from Information_schema.columns where table_name='tbGui_ExecutePOC'                
*/                

-- find proc        
--what was the name of procedure with something like role                
/*                
select * from sys.procedures where [name] like '%ext%'                
exec sp_HelpText procName        
*/                
/*                
exec sp_helpText procUtils_InsertGenerator                
*/                
--how to list all databases in sql server                 
/*                
SELECT database_id AS ID, NULL AS ParentID, name AS Text FROM sys.databases ORDER BY [name]                
*/                

--HOW-TO LIST ALL TABLES IN A SQL SERVER 2005 DATABASE                
/*                
SELECT TABLE_NAME FROM [POC].INFORMATION_SCHEMA.TABLES                
WHERE TABLE_TYPE = 'BASE TABLE'                  
AND TABLE_NAME <> 'dtproperties'                  
ORDER BY TABLE_NAME                


*/                
--HOW-TO ENABLE XP_CMDSHELL START                
-------------------------------------------------------------------------                
-- configure verbose mode temporarily                 
-- EXECUTE sp_configure 'show advanced options', 1                 
-- RECONFIGURE WITH OVERRIDE                 
--GO                 


--ENABLE xp_cmdshell                 
-- EXECUTE sp_configure 'xp_cmdshell', '1'                 
-- RECONFIGURE WITH OVERRIDE                 
-- EXEC SP_CONFIGURE 'show advanced option', '1';                 
-- SHOW THE CONFIGURATION                 
-- EXEC SP_CONFIGURE;                 


--turn show advance options off                 
-- GO                 
--EXECUTE sp_configure 'show advanced options', 0                 
-- RECONFIGURE WITH OVERRIDE                 
-- GO                

--HOW-TO ENABLE XP_CMDSHELL END                
-------------------------------------------------------------------------                

--HOW-TO IMPLEMENT SLEEP                 
-- sleep for 10 seconds                 
-- WAITFOR DELAY '00:00:10' SELECT * FROM My_Table                

/* LIST ALL PRIMARY KEYS                 

SELECT                 
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS.TABLE_NAME AS TABLE_NAME,                
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME AS COLUMN_NAME,                 
  REPLACE(INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE,' ', '_') AS CONSTRAINT_TYPE                 
FROM                 
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS                 
  INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ON                 
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_NAME =                 
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME                 
WHERE                 
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS.TABLE_NAME <> N'sysdiagrams'                 
ORDER BY                 
  INFORMATION_SCHEMA.TABLE_CONSTRAINTS.TABLE_NAME ASC                

*/                

--HOW-TO COPY TABLE AND THE WHOLE TABLE DATA , COPY TABLE FROM DB TO DB                
--==================================================START                 
/*                
use Poc_Dev                
go                
drop table tbGui_LinksVisibility                

use POc_test                
go                
select *                 
INTO [POC_Dev].[ga].[tbGui_LinksVisibility]                
from [POC_TEST].[ga].[tbGui_LinksVisibility]                


*/                
--HOW-TO COPY TABLE AND THE WHOLE TABLE DATA , COPY TABLE FROM DB TO DB                
--====================================================END                
--=================================================== SEE TABLE METADATA START                
/*                



SELECT c.name AS [COLUMN_NAME], sc.data_type AS [DATA_TYPE], [value] AS                 
[DESCRIPTION] , c.max_length as [MAX_LENGTH] , c.is_nullable AS [OPTIONAL]                 
, c.is_identity AS [IS_PRIMARY_KEY] FROM sys.extended_properties AS ep                 
INNER JOIN sys.tables AS t ON ep.major_id = t.object_id                 
INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id                 
= c.column_id                 
INNER JOIN INFORMATION_SCHEMA.COLUMNS sc ON t.name = sc.table_name and                 
c.name = sc.column_name                 
WHERE class = 1 and t.name = 'tbGui_ExecutePOC' ORDER BY SC.DATA_TYPE                


*/                
--=================================================== SEE TABLE METADATA END               
    /*            
select * from Information_schema.columns                
select table_name , column_name from Information_schema.columns where table_name='tbGui_Wizards'                
    */            


--=================================================== LIST ALL TABLES AND THEIR DESCRIPTOINS START                
/*                

SELECT T.name AS TableName, CAST(Props.value AS varchar(1000)) AS                
TableDescription                
FROM sys.tables AS T LEFT OUTER JOIN                
(SELECT class, class_desc, major_id, minor_id,                
name, value                
FROM sys.extended_properties                
WHERE (minor_id = 0) AND (class = 1)) AS                
Props ON T.object_id = Props.major_id                
WHERE (T.type = 'U') AND (T.name <> N'sysdiagrams')                
ORDER BY TableName                
*/                
--=================================================== LIST ALL TABLES AND THEIR DESCRIPTOINS START                

--=================================================== LIST ALL OBJECTS FROM DB START                
/*                


use DB                
--HOW-TO LIST ALL PROCEDURE IN A DATABASE                
select s.name from sysobjects s where type = 'P'                
--HOW-TO LIST ALL TRIGGERS BY NAME IN A DATABASE                
select s.name from sysobjects s where type = 'TR'                
--HOW-TO LIST TABLES IN A DATABASE                 
select s.name from sysobjects s where type = 'U'                
--how-to list all system tables in a database                
select s.name from sysobjects s where type = 's'                
--how-to list all the views in a database                
select s.name from sysobjects s where type = 'v'                


*/                

/*                
Similarly you can find out other objects created by user, simple change type =                 

C = CHECK constraint                 

D = Default or DEFAULT constraint                 

F = FOREIGN KEY constraint                 

L = Log                 

FN = Scalar function                 

IF = In-lined table-function                 

P = Stored procedure                 

PK = PRIMARY KEY constraint (type is K)                 

RF = Replication filter stored procedure                

S = System table                 

TF = Table function                 

TR = Trigger                 

U = User table ( this is the one I discussed above in the example)                

UQ = UNIQUE constraint (type is K)                 

V = View                 

X = Extended stored procedure                
*/                



--=================================================== HOW-TO SEE ALL MY PERMISSIONS START                


/*                

SELECT * FROM fn_my_permissions(NULL, 'SERVER');                
USE poc_qa;                
SELECT * FROM fn_my_permissions (NULL, 'database');                
GO                

*/                
--=================================================== HOW-TO SEE ALL MY PERMISSIONS END                

/*               
--find table               

use poc_dev               
go               
select s.name from sysobjects s where type = 'u'  and s.name like '%Visibility%'              
select * from tbGui_LinksVisibility              

*/              

/* find cursor              

use poc      
go        
DECLARE @procName varchar(100)        
DECLARE @cursorProcNames CURSOR        
SET @cursorProcNames = CURSOR FOR        
select name from sys.procedures where modify_date > '2009-02-05 13:12:15.273' order by modify_date desc       

OPEN @cursorProcNames        
FETCH NEXT        
FROM @cursorProcNames INTO @procName        
WHILE @@FETCH_STATUS = 0        
BEGIN        

set nocount off;        
exec sp_HelpText @procName --- or print them        
-- print @procName        

FETCH NEXT        
FROM @cursorProcNames INTO @procName        
END        
CLOSE @cursorProcNames        

select @@error    

*/              


/* --  SEE STORED PROCEDURE EXT PROPS            

SELECT ep.name as 'EXT_PROP_NAME' , SP.NAME , [value] as 'DESCRIPTION' FROM sys.extended_properties as ep left join sys.procedures as sp on sp.object_id = ep.major_id where sp.type='P'            


-- what the hell I ve been doing lately on sql server 2005 / 2008
select o.name , 
(SELECT [definition] AS [text()] FROM sys.all_sql_modules where sys.all_sql_modules.object_id=a.object_id FOR XML PATH(''), TYPE) AS Statement_Text
, a.object_id, o.modify_date from sys.all_sql_modules a left join sys.objects o on a.object_id=o.object_id order by 4 desc



-- GET THE RIGHT LANG SCHEMA START 
DECLARE @template AS varchar(max)
SET @template = 'SELECT * FROM {object_name}'

DECLARE @object_name AS sysname

SELECT @object_name = QUOTENAME(s.name) + '.' + QUOTENAME(o.name)
FROM sys.objects o
INNER JOIN sys.schemas s
    ON s.schema_id = o.schema_id
WHERE o.object_id = OBJECT_ID(QUOTENAME(@LANG) + '.[TestingLanguagesInNameSpacesDelMe]')

IF @object_name IS NOT NULL
BEGIN
    DECLARE @sql AS varchar(max)
    SET @sql = REPLACE(@template, '{object_name}', @object_name)
    EXEC (@sql)
END
-- GET THE RIGHT LANG SCHEMA END 

--  SEE STORED PROCEDURE EXT PROPS end*/             
set nocount off
GO
EXEC sys.sp_addextendedproperty @name=N'AuthorName', @value=N'Yordan Georgiev' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'PROCEDURE',@level1name=N'procUtils_SqlCheatSheet'
GO
EXEC sys.sp_addextendedproperty @name=N'ProcDescription', @value=N'TODO:ADD HERE DESCRPIPTION' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'PROCEDURE',@level1name=N'procUtils_SqlCheatSheet'
GO
EXEC sys.sp_addextendedproperty @name=N'ProcVersion', @value=N'0.1.0.20090406.1317' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'PROCEDURE',@level1name=N'procUtils_SqlCheatSheet'
GO
/****** Object:  UserDefinedFunction [ga].[GetDbVersion]    Script Date: 04/22/2009 13:21:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [ga].[GetDbVersion]()
RETURNS VARCHAR(20)
    BEGIN
        RETURN convert(varchar(20) , (select value from sys.extended_properties where name='DbVersion' and class_desc='DATABASE') )
    END
GO
EXEC sys.sp_addextendedproperty @name=N'AuthorName', @value=N'Yordan Georgiev' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'FUNCTION',@level1name=N'GetDbVersion'
GO
EXEC sys.sp_addextendedproperty @name=N'ChangeDescription', @value=N'Initial creation' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'FUNCTION',@level1name=N'GetDbVersion'
GO
EXEC sys.sp_addextendedproperty @name=N'CreatedWhen', @value=N'getDate()' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'FUNCTION',@level1name=N'GetDbVersion'
GO
EXEC sys.sp_addextendedproperty @name=N'Description', @value=N'Gets the current version of the database ' , @level0type=N'SCHEMA',@level0name=N'ga', @level1type=N'FUNCTION',@level1name=N'GetDbVersion'
GO
/****** Object:  UserDefinedFunction [ga].[GetDbType]    Script Date: 04/22/2009 13:21:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [ga].[GetDbType]()
RETURNS VARCHAR(30)
    BEGIN
        RETURN convert(varchar(30) , (select value from sys.extended_properties where name='DbType' and class_desc='DATABASE') )
    END
GO
/****** Object:  Default [DF_tb_DataMeta_ObjChangeLog_DbVersion]    Script Date: 04/22/2009 13:21:40 ******/
ALTER TABLE [ga].[tb_DataMeta_ObjChangeLog] ADD  CONSTRAINT [DF_tb_DataMeta_ObjChangeLog_DbVersion]  DEFAULT ('select ga.GetDbVersion()') FOR [DbVersion]
GO
/****** Object:  Default [DF_tb_DataMeta_ObjChangeLog_EventDate]    Script Date: 04/22/2009 13:21:40 ******/
ALTER TABLE [ga].[tb_DataMeta_ObjChangeLog] ADD  CONSTRAINT [DF_tb_DataMeta_ObjChangeLog_EventDate]  DEFAULT (getdate()) FOR [EventDate]
GO
/****** Object:  Default [DF_tb_DataMeta_ObjChangeLog_ObjVersion]    Script Date: 04/22/2009 13:21:40 ******/
ALTER TABLE [ga].[tb_DataMeta_ObjChangeLog] ADD  CONSTRAINT [DF_tb_DataMeta_ObjChangeLog_ObjVersion]  DEFAULT ('0.0.0') FOR [ObjVersion]
GO
/****** Object:  DdlTrigger [trigMetaDoc_TraceDbChanges]    Script Date: 04/22/2009 13:21:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create trigger [trigMetaDoc_TraceDbChanges]
on database
for create_procedure, alter_procedure, drop_procedure,
create_table, alter_table, drop_table,
create_function, alter_function, drop_function , 
create_trigger , alter_trigger , drop_trigger 
as

set nocount on

declare @data xml
set @data = EVENTDATA()
declare @DbVersion varchar(20)
set @DbVersion =(select ga.GetDbVersion())
declare @DbType varchar(20)
set @DbType =(select ga.GetDbType())
declare @DbName varchar(256)
set @DbName =@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)')
declare @EventType varchar(256)
set @EventType =@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)')
declare @ObjectName varchar(256)
set @ObjectName  = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)')
declare @ObjectType varchar(25)
set @ObjectType = @data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)')
declare @TSQLCommand varchar(max)
set @TSQLCommand = @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)')
declare @opentag varchar(4)
set @opentag= '&lt;'
declare @closetag varchar(4) 
set @closetag= '&gt;'
declare @newDataTxt varchar(max) 
set @newDataTxt= cast(@data as varchar(max))
set @newDataTxt = REPLACE ( REPLACE(@newDataTxt , @opentag , '<') , @closetag , '>')
-- print @newDataTxt
declare @newDataXml xml 
set @newDataXml = CONVERT ( xml , @newDataTxt)
declare @Version varchar(50)
set @Version = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/Version)[1]', 'varchar(50)')

-- if we are dropping take the version from the existing object 
if  ( SUBSTRING(@EventType , 0 , 5)) = 'DROP'
set @Version =( select top 1 [Version]  from ga.tb_DataMeta_ObjChangeLog where ObjectName=@ObjectName order by [LogId] desc)



declare @LoginName varchar(256) 
set @LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
declare @FirstName varchar(50)
set @FirstName= (select [FirstName] from [ga].[tb_BLSec_LoginsForUsers] where [LoginName] = @LoginName)
declare @LastName varchar(50)
set @LastName  = (select [LastName] from [ga].[tb_BLSec_LoginsForUsers] where [LoginName] = @LoginName)
declare @SchemaName sysname 
set @SchemaName = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');
--declare @Description xml 
--set @Description = @data.query('(/EVENT_INSTANCE/TSQLCommand/text())')




--print 'VERSION IS ' + @Version
--print @newDataTxt
--print cast(@data as varchar(max))


-- select column_name from information_schema.columns where table_name ='tb_DataMeta_ObjChangeLog'
insert into [ga].[tb_DataMeta_ObjChangeLog]
(
[DatabaseName] ,
[SchemaName],
[DbVersion] ,
[DbType],
[EventType],
[ObjectName],
[ObjectType] ,
[Version],
[SqlCommand] ,
[LoginName] ,
[FirstName],
[LastName] 
)

values(

@DbName,
@SchemaName,
@DbVersion,
@DbType,
@EventType, 
@ObjectName, 
@ObjectType , 
@Version,
@newDataTxt, 
@LoginName , 
@FirstName , 
@LastName
)
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
DISABLE TRIGGER [trigMetaDoc_TraceDbChanges] ON DATABASE
GO
/****** Object:  DdlTrigger [trigMetaDoc_TraceDbChanges]    Script Date: 04/22/2009 13:21:29 ******/
Enable Trigger [trigMetaDoc_TraceDbChanges] ON Database
GO

언급URL : https://stackoverflow.com/questions/115369/do-you-use-source-control-for-your-database-items

반응형