[sql-server] SQL Server의 숨겨진 기능

SQL Server 의 숨겨진 기능은 무엇입니까 ?

예를 들어, 문서화되지 않은 시스템 저장 프로 시저, 매우 유용하지만 충분히 문서화되지 않은 작업을 수행하는 트릭?


답변

모든 위대한 답변에 대해 모두에게 감사합니다!

저장 프로 시저

  • sp_msforeachtable : ‘?’명령을 실행합니다 각 테이블 이름으로 대체 됨 (v6.5 이상)
  • sp_msforeachdb : ‘?’명령을 실행합니다 각 데이터베이스 이름으로 대체 (v7 이상)
  • sp_who2 : sp_who와 비슷하지만 블록 문제 해결에 대한 더 많은 정보 (v7 이상)
  • sp_helptext : 저장 프로 시저의 코드를 원하면보기 및 UDF
  • sp_tables : 범위 내에서 데이터베이스의 모든 테이블 및 뷰 목록을 반환합니다.
  • sp_stored_procedures : 모든 저장 프로 시저 목록을 반환
  • xp_sscanf : 문자열에서 각 형식 인수로 지정된 인수 위치로 데이터를 읽습니다.
  • xp_fixeddrives : : 가장 큰 여유 공간이있는 고정 드라이브 찾기
  • sp_help : 테이블 구조, 테이블의 인덱스 및 제약 조건을 알고 싶다면 또한 뷰와 UDF. 바로 가기는 Alt + F1입니다.

짧은 발췌

  • 무작위 순서로 행 반환
  • 마지막으로 수정 한 날짜 별 모든 데이터베이스 사용자 개체
  • 반환 날짜 만
  • 현재 주 어딘가에 날짜가 기록 된 레코드를 찾으십시오.
  • 지난 주에 발생한 날짜를 기록하십시오.
  • 현재 주가 시작되는 날짜를 반환합니다.
  • 지난 주 시작 날짜를 반환합니다.
  • 서버에 배포 된 절차의 텍스트를 참조하십시오.
  • 데이터베이스에 대한 모든 연결을 삭제하십시오.
  • 테이블 체크섬
  • 행 체크섬
  • 데이터베이스에서 모든 절차를 삭제
  • 복원 후 로그인 ID를 올바르게 다시 매핑
  • INSERT 문에서 스토어드 프로 시저 호출
  • 키워드로 절차 찾기
  • 데이터베이스에서 모든 절차를 삭제
  • 프로그래밍 방식으로 데이터베이스에 대한 트랜잭션 로그를 쿼리하십시오.

기능

  • 해시 바이트 ()
  • EncryptByKey
  • PIVOT 명령

기타

  • 연결 문자열 엑스트라
  • TableDiff.exe
  • 로그온 이벤트에 대한 트리거 (서비스 팩 2의 새로운 기능)
  • PCC (지속 계산 열)로 성능 향상
  • sys.database_principles의 DEFAULT_SCHEMA 설정
  • 강제 매개 변수화
  • Vardecimal 저장소 형식
  • 몇 초 만에 가장 인기있는 검색어 파악
  • 확장 가능한 공유 데이터베이스
  • SQL Management Studio의 테이블 / 저장 프로 시저 필터 기능
  • 추적 플래그
  • GO배치를 반복 한 후의 번호
  • 스키마를 사용한 보안
  • 내장 된 암호화 기능, 뷰 및 트리거가있는 기본 테이블을 사용하여 암호화


답변

Management Studio에서 GO 배치 종료 마커 뒤에 숫자를 넣어 배치가 해당 횟수만큼 반복되도록 할 수 있습니다.

PRINT 'X'
GO 10

‘X’를 10 번 인쇄합니다. 이렇게하면 반복적 인 작업을 수행 할 때 번거로운 복사 / 붙여 넣기에서 벗어날 수 있습니다.


답변

많은 SQL Server 개발자는 여전히 DELETE, INSERT 및 UPDATE 문 에서 OUTPUT 절 (SQL Server 2005 이상)에 대해 알지 못하는 것 같습니다 .

행이 삽입, 갱신 또는 삭제 한 알 매우 유용 할 수 있고, OUTPUT 절은 아주 쉽게 할 수 있습니다 – 그것은라는 “가상”테이블에 액세스 할 수 있도록 inserted하고 deleted(트리거에서 등) :

DELETE FROM (table)
OUTPUT deleted.ID, deleted.Description
WHERE (condition)

OUTPUT 절을 사용하여 INT IDENTITY 기본 키 필드가있는 테이블에 값을 삽입하는 경우 삽입 된 새 ID를 즉시 얻을 수 있습니다.

INSERT INTO MyTable(Field1, Field2)
OUTPUT inserted.ID
VALUES (Value1, Value2)

그리고 업데이트하는 경우 변경된 내용을 아는 것이 매우 유용 할 수 있습니다.이 경우 insertedUPDATE 이후의 새 값을 deleted나타내며 UPDATE 전의 이전 값 을 나타냅니다.

UPDATE (table)
SET field1 = value1, field2 = value2
OUTPUT inserted.ID, deleted.field1, inserted.field1
WHERE (condition)

많은 정보가 리턴되면 OUTPUT의 출력을 임시 테이블 또는 테이블 변수 ( OUTPUT INTO @myInfoTable) 로 경로 재 지정할 수도 있습니다 .

매우 유용하며 알려진 바가 거의 없습니다!

마크


답변

sp_msforeachtable: ‘?’명령을 실행합니다 각 테이블 이름으로 대체되었습니다. 예 :

exec sp_msforeachtable "dbcc dbreindex('?')"

각 테이블에 대해 최대 3 개의 명령을 실행할 수 있습니다

exec sp_msforeachtable
    @Command1 = 'print ''reindexing table ?''',
    @Command2 = 'dbcc dbreindex(''?'')',
    @Command3 = 'select count (*) [?] from ?'

또한, sp_MSforeachdb


답변

연결 문자열 엑스트라 :

MultipleActiveResultSets = true;

따라서 ADO.Net 2.0 이상은 단일 데이터베이스 연결에서 여러 개의 정방향 전용 읽기 전용 결과 집합을 읽으므로 많은 양의 읽기를 수행하는 경우 성능을 향상시킬 수 있습니다. 여러 가지 쿼리 유형을 수행하더라도이를 설정할 수 있습니다.

응용 프로그램 이름 = MyProgramName

이제 sysprocesses 테이블을 쿼리하여 활성 연결 목록을 보려면 프로그램 이름이 “.Net SqlClient Data Provider”대신 program_name 열에 나타납니다.


답변

TableDiff.exe

  • 테이블 차이 도구를 사용하면 소스 테이블과 대상 테이블 또는 뷰 간의 차이를 발견하고 조정할 수 있습니다. Tablediff Utility는 스키마와 데이터의 차이점을보고 할 수 있습니다. tablediff의 가장 인기있는 기능은 테이블 간의 차이를 조정하는 대상에서 실행할 수있는 스크립트를 생성 할 수 있다는 것입니다.

링크


답변

무작위 순서로 행을 리턴하는 덜 알려진 TSQL 기술 :

-- Return rows in a random order
SELECT
    SomeColumn
FROM
    SomeTable
ORDER BY
    CHECKSUM(NEWID())


답변

Management Studio에서 다음을 통해 쉼표로 구분 된 테이블 열 목록을 빠르게 얻을 수 있습니다.

  1. 개체 탐색기에서 지정된 테이블 아래의 노드를 확장합니다 (따라서 열, 키, 제약 조건, 트리거 등의 폴더가 표시됨)
  2. 열 폴더를 가리키고 쿼리로 드래그하십시오.

이것은 테이블을 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 스크립트 테이블 …을 선택한 다음 삽입을 선택하여 반환 된 heinous 형식을 사용하지 않으려는 경우에 유용합니다.이 트릭은 다른 폴더와 함께 작동하여 폴더 내에 포함 된 쉼표로 구분 된 이름 목록.