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)
그리고 업데이트하는 경우 변경된 내용을 아는 것이 매우 유용 할 수 있습니다.이 경우 inserted
UPDATE 이후의 새 값을 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에서 다음을 통해 쉼표로 구분 된 테이블 열 목록을 빠르게 얻을 수 있습니다.
- 개체 탐색기에서 지정된 테이블 아래의 노드를 확장합니다 (따라서 열, 키, 제약 조건, 트리거 등의 폴더가 표시됨)
- 열 폴더를 가리키고 쿼리로 드래그하십시오.
이것은 테이블을 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 스크립트 테이블 ...을 선택한 다음 삽입을 선택하여 반환 된 heinous 형식을 사용하지 않으려는 경우에 유용합니다.이 트릭은 다른 폴더와 함께 작동하여 폴더 내에 포함 된 쉼표로 구분 된 이름 목록.
행 생성자
하나의 insert 문으로 여러 행의 데이터를 삽입 할 수 있습니다.
INSERT INTO Colors (id, Color)
VALUES (1, 'Red'),
(2, 'Blue'),
(3, 'Green'),
(4, 'Yellow')
테이블 구조, 인덱스 및 제약 조건을 알고 싶은 경우 :
sp_help 'TableName'
입력 의 MD2, MD4, MD5, SHA 또는 SHA1 해시를 리턴하는 HashBytes () .
가장 인기있는 검색어 파악
- sys.dm_exec_query_stats를 사용하면 단일 쿼리로 여러 가지 쿼리 분석 조합을 파악할 수 있습니다.
commnad와 연결
select * from sys.dm_exec_query_stats
order by execution_count desc
여기에 링크 설명을 입력하십시오 http://michaeljswart.com/wp-content/uploads/2010/02/venus.png
이 두 키워드는 정교한 조인 및 하위 쿼리를 작성하는 대신 두 쿼리 결과를 비교할 때 쿼리의 의도를 표현하는 훨씬 간결하고 읽기 쉬운 방법입니다. SQL Server 2005의 새로운 기능으로, 수년 동안 TSQL 언어에 이미 존재했던 UNION을 강력하게 보완합니다.
EXCEPT, INTERSECT 및 UNION의 개념은 모든 현대 RDBMS에서 사용하는 관계형 모델링의 기초 및 기초로 사용되는 세트 이론에서 기본입니다. 이제 벤 다이어그램 유형 결과는 TSQL을 사용하여보다 직관적이고 매우 쉽게 생성 할 수 있습니다.
정확히 숨겨져 있지는 않지만 PIVOT 명령 에 대해 너무 많은 사람들이 아는 것은 없습니다 . 커서를 사용하는 저장 프로 시저를 변경할 수 있었고 줄 수의 10 분의 1의 빠른 6 초 코드를 실행하는 데 2 분이 걸렸습니다!
테스트 목적 또는 기타 목적으로 데이터베이스를 복원 할 때 유용합니다. 로그인 ID를 올바르게 다시 매핑합니다.
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'
데이터베이스에 대한 모든 연결을 삭제하십시오.
Use Master
Go
Declare @dbname sysname
Set @dbname = 'name of database you want to drop connections from'
Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
Execute ('Kill ' + @spid)
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname) and spid > @spid
End
테이블 체크섬
Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK)
행 체크섬
Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK) Where Column = Value
이것이 숨겨진 기능인지 아닌지는 잘 모르겠지만, 이것을 우연히 발견하여 많은 경우에 유용하다는 것을 알았습니다. 커서를 사용하고 select 문을 반복하지 않고 단일 select 문에서 필드 집합을 연결할 수 있습니다.
예:
DECLARE @nvcConcatonated nvarchar(max)
SET @nvcConcatonated = ''
SELECT @nvcConcatonated = @nvcConcatonated + C.CompanyName + ', '
FROM tblCompany C
WHERE C.CompanyID IN (1,2,3)
SELECT @nvcConcatonated
결과 :
Acme, Microsoft, Apple,
저장 프로 시저 코드를 원하는 경우 다음을 수행 할 수 있습니다.
sp_helptext 'ProcedureName'
(숨겨진 기능인지 확실하지 않지만 항상 사용합니다)
저장 프로 시저 트릭은 INSERT 문에서 호출 할 수 있다는 것입니다. SQL Server 데이터베이스에서 작업 할 때 매우 유용했습니다.
CREATE TABLE #toto (v1 int, v2 int, v3 char(4), status char(6))
INSERT #toto (v1, v2, v3, status) EXEC dbo.sp_fulubulu(sp_param1)
SELECT * FROM #toto
DROP TABLE #toto
SQL Server 2005/2008에서 SELECT 쿼리 결과에 행 번호를 표시하려면
SELECT ( ROW_NUMBER() OVER (ORDER BY OrderId) ) AS RowNumber,
GrandTotal, CustomerId, PurchaseDate
FROM Orders
ORDER BY는 필수 조항입니다. OVER () 절은 지정된 열 (이 경우 OrderId)에서 데이터를 정렬하고 정렬 결과에 따라 숫자를 지정하도록 SQL 엔진에 지시합니다.
저장 프로 시저 인수를 구문 분석하는 데 유용합니다. xp_sscanf
문자열에서 각 형식 인수로 지정된 인수 위치로 데이터를 읽습니다.
다음 예제는 xp_sscanf를 사용하여 소스 문자열 형식에서의 위치를 기반으로 소스 문자열에서 두 개의 값을 추출합니다.
DECLARE @filename varchar (20), @message varchar (20)
EXEC xp_sscanf 'sync -b -fproducts10.tmp -rrandom', 'sync -b -f%s -r%s',
@filename OUTPUT, @message OUTPUT
SELECT @filename, @message
결과 집합은 다음과 같습니다.
-------------------- --------------------
products10.tmp random
반환 날짜 만
Select Cast(Floor(Cast(Getdate() As Float))As Datetime)
또는
Select DateAdd(Day, 0, DateDiff(Day, 0, Getdate()))
dm_db_index_usage_stats
이를 통해 테이블에 DateUpdated 열이 없더라도 테이블의 데이터가 최근에 업데이트되었는지 알 수 있습니다.
SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'MyDatabase')
AND OBJECT_ID=OBJECT_ID('MyTable')
코드 : http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/
에서 참조 정보 : SQL 서버 - 테이블의 마지막에 삽입 된 행의 날짜 / 시간 무엇입니까?
SQL 2005 이상에서 사용 가능
다음은 유용한 기능이지만 많은 사람들이 모르는 것 같습니다.
sp_tables
현재 환경에서 쿼리 할 수있는 개체 목록을 반환합니다. 이는 동의어 개체를 제외하고 FROM 절에 나타날 수있는 모든 개체를 의미합니다.
sp_stored_procedures
현재 환경에서 저장 프로 시저 목록을 반환합니다.
이번 주 어딘가에 날짜가 기록 된 레코드를 찾으십시오.
where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ), 0 )
지난 주에 발생한 날짜를 기록하십시오.
where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )
현재 주가 시작되는 날짜를 반환합니다.
select dateadd( week, datediff( week, 0, getdate() ), 0 )
지난 주 시작 날짜를 반환합니다.
select dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )
숨겨진 기능은 아니지만 Management \ Tools \ Options \ Keyboard 아래의 키 매핑 설정 : Alt + F1은 기본적으로 sp_help "선택한 텍스트"로 설정되어 있지만 sp_helptext "선택한 텍스트"에 Ctrl + F1을 추가하지 않으면 살 수 없습니다.
지속 형 계산 열
- 계산 열은 런타임 계산 비용을 데이터 수정 단계로 전환하는 데 도움이됩니다. 계산 열은 나머지 행과 함께 저장되며 계산 열과 쿼리의식이 일치 할 때 투명하게 활용됩니다. 또한 PCC에서 인덱스를 작성하여 표현식의 필터링 및 범위 스캔 속도를 높일 수 있습니다.
정렬하기에 적합한 열이 없거나 테이블에서 기본 정렬 순서를 원하고 각 행을 열거하려는 경우가 있습니다. 그렇게하려면 "order by"절에 "(select 1)"을 입력하면 원하는 것을 얻을 수 있습니다. 깔끔하지?
select row_number() over (order by (select 1)), * from dbo.Table as t
EncryptByKey를 통한 간단한 암호화
참고 URL : https://stackoverflow.com/questions/121243/hidden-features-of-sql-server
'IT story' 카테고리의 다른 글
PHP에서 스위치 케이스 '또는'을 사용하는 방법 (0) | 2020.04.26 |
---|---|
프로그래밍 방식으로 iOS 7 기본 파란색을 얻으려면 어떻게해야합니까? (0) | 2020.04.26 |
메소드의 실행 시간을 정확히 밀리 초 단위로 기록하는 방법은 무엇입니까? (0) | 2020.04.26 |
JavaScript 신호음을 어떻게합니까? (0) | 2020.04.26 |
PHP에서 사용자를위한 CSV 파일 생성 (0) | 2020.04.26 |